Windows环境下多线程编程原理与应用读书笔记(1)————基本概念
自从学了操作系统知识后,我就对多线程比较感兴趣,总想让自己写一些有关多线程的程序代码,但一直以来,发现自己都没怎么好好的去全面学习这方面的知识,仅仅是完成了操作系统课程上的小程序,对多线程的理解也不是很透彻。现在保研了,发现自己的时间也比较充裕了,因此想自己去系统的学习一下多线程的编程,说做就马上做(当时还躺在床上),我立马去图书馆,检索有关多线程的书籍,最终决定选择《Windows环境下多线程编程原理与应用》这本书,虽然有点旧,但对我这个菜鸟来说,还是有很多的东西需要学习的。因此就拿着本书开始自学多线程编程。写这篇随笔,也是为了今后记录自己的学习经历,也希望自己能够坚持下去。
上面的只是一个小插曲,现在开始记录自己今天的学到的知识。 编程之前肯定得先要了解一些基本的概念,比如进程和线程,那什么是进程和线程呢?
<一>进程和线程的自我理解
- 进程:正在运行的程序,拥有内存,CPU时间等一系列资源,在不同的时刻还可以处于不同的状态。
- 线程:Windows系统中最小执行单元,我的理解就是线程“寄生”在进程中,一个进程可以有多个线程,各个线程共享进程中的公共资源。
<二>单线程和多线程比较
- 单线程:一个进程只拥有一个线程,在计算机中的执行顺序就是按部就班,依次执行。
- 多线程:单CPU中,多线程中的“多”,只是给人的一种假像,每一个线程也是按照时间片来执行的,只是执行的速度太快,以至于给人的感觉好像“多”个线程一起在执行,所以站在不同的角度看待事物,给人的感觉也是不一样的(题外话)。
<三>同步对象
- 临界区对象(Critical Section Object):临界区对象,通过提供所有线程必须共享的对象来控制线程。只有拥有临界区对象的线程才可以访问受保护的资源(在临界区中被操作),其他线程必须得到该临界区对象才可以继续执行下去,否则将计入挂起状态(一种线程状态)。获得临界区对象的线程在离开临界区时候需要释放该临界区对象,以便其他线程得到访问权限。
- 互斥对象(Mutex Object):互斥对象和临界区对象的功能很相似,它们的区别是,互斥对象不仅仅保护一个进程中的资源共享,还可以保护进程间(多个进程之间)资源共享。
- 事件对象(Event Object):事件对象用来给线程传递信号,指示线程中某个特定的操作可以开始或者结束。同理,想要执行这个特定操作却没有获得事件对象的线程将处于挂起状态。
- 信号对象(Semaphore Object):信号对象与互斥对象类似,区别在于互斥对象每次只允一个许线程访问数据,信号对象却允许每次多个线程访问数据。
<四>Windows线程调度算法简介
- 总的算法是基于优先级可抢占算法;
- Windows系统将线程的优先级划分为32个等级,0为最低等级,31为最高等级;
- 同一优先级按照FIFS(First In First Service)----先来先服务;
- 为了避免”饿死“,系统动态的改变线程的优先级(降级);
- 当某一个线程正在执行时,高优先级可以抢占其时间片;
- 系统可以动态提高或者降低某些线程的优先级;
Windows环境下多线程编程原理与应用读书笔记(1)————基本概念的更多相关文章
- Windows环境下多线程编程原理与应用读书笔记(3)————Windows环境中的多线程实现(3)
纤程 纤程(fiber): 相当于用户级别的线程或轻进程.纤程由Win32库函数支持,对核心是不可见的.纤程可以通过SwitchToFiber显示至另一合作纤程,以实现合作纤程之间的协同.线程是在Wi ...
- Windows环境下多线程编程原理与应用读书笔记(8)————信号量及其应用
<一>线程间同步原因 线程间竞争共享资源: 线程间为完成某个任务而协作: 通过互斥量可以实现线程间由于竞争所需要的同步,通过事件可以实现线程间由于协作所需要的同步. 信号量很好地将互斥量和 ...
- Windows环境下多线程编程原理与应用读书笔记(7)————事件及其应用
<一>事件 事件主要用于线程间传递消息,通过事件来控制一个线程是处于执行状态还是处于挂起状态. 事件和互斥量之间的差别: 事件主要用于协调两个或者多个线程之间的动作,使其协调一致,符合逻辑 ...
- Windows环境下多线程编程原理与应用读书笔记(6)————临界段及其应用
<一>临界段 临界段对象通过提供所有线程必须共享的对象来控制线程.只有拥有临界段对象的线程才能够访问保护的资源.在另一个线程可以访问该资源之前,前一线程必须释放临界段对象,一遍新的线程可以 ...
- Windows环境下多线程编程原理与应用读书笔记(5)————互斥及其应用
<一>互斥的同步机制 思想:当一个线程获得互斥量了后,其他所有要获取同一个互斥量的线程都处于阻塞状态,直到第一个线程释放互斥量为止. 设想几个线程竞争同一个互斥量,其中一个线程获得了互斥量 ...
- Windows环境下多线程编程原理与应用读书笔记(2)————面向对象技术
面向对象技术是学C++需要重点掌握的知识,因为我觉得自己的基础还是比较可以,这一章节的内容就只是粗略的读了一遍,在此就不做过多的笔记.
- Windows环境下多线程编程原理与应用读书笔记(4)————线程间通信概述
<一>线程间通信方法 全局变量方式:进程中的线程共享全局变量,可以通过全局变量进行线程间通信. 参数传递法:主线程创建子线程并让子线程为其服务,因此主线程和其他线程可以通过参数传递进行通信 ...
- Java多线程编程实战指南 设计模式 读书笔记
线程设计模式在按其有助于解决的多线程编程相关的问题可粗略分类如下. 不使用锁的情况下保证线程安全: Immutable Object(不可变对象)模式.Thread Specific Storage( ...
- 关于docker在windows环境下运行的第一次体验
关于docker在windows环境下执行的原理 1.1. 首先是Docker Quickstart启动,如果在虚拟机Oracle VM VirtualBox不存在default虚 ...
随机推荐
- canvas浅谈 实现简单的自旋转下落
旋转和平移是2个基础的动画效果,也是复杂动画的基础. 如果是普通的页面只要设置transform属性很容易实现平移+旋转的组合效果,达到自旋转下落的效果.因为操作的直接是动作元素本身很容易理解. 但是 ...
- java之装饰器模式
Decorator Pattern(装饰器模式),定义:Attach additional responsibilities to an object dynamically. Decorators ...
- SiganlR 系列之概述
简介 SignalR 是微软的 http 长连接(以下简称长连接)框架,它的出现为我们提供了一套行之有效的实时通信的解决方案. 背景 在http 1.0 时代,preRequest 都会建立新的tcp ...
- 【POJ】3090 Visible Lattice Points(欧拉函数)
Visible Lattice Points Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 7705 Accepted: ...
- Free Goodies UVA - 12260 贪心
Free Goodies Time Limit: 3000MS Memory Limit: Unknown 64bit IO Format: %lld & %llu [Submit ...
- (转)深度学习word2vec笔记之基础篇
深度学习word2vec笔记之基础篇 声明: 1)该博文是多位博主以及多位文档资料的主人所无私奉献的论文资料整理的.具体引用的资料请看参考文献.具体的版本声明也参考原文献 2)本文仅供学术交流,非商用 ...
- java数据库编程之事务、视图、索引、备份、恢复
第五章:事务.视图.索引.备份和恢复 5.1:事务 事务的概念:事务(transcation)是讲一系列数据操作捆绑成为一个整体进行统计管理. 如果某一事务执行成功了,则该事务进行操作的所有数据将会提 ...
- [js插件开发教程]一步步开发一个可以定制配置的隔行变色小插件
隔行变色功能,不用js,直接用css伪类就可以做,这个实例可以作为js插件开发很好的入门级实例.本文实现的隔行变色包括以下功能: 1,支持2种常用结构共存( div元素 和 表格类型 ) 2,一个页面 ...
- WPF DataGrid Custommization using Style and Template
WPF DataGrid Custommization using Style and Template 代码下载:http://download.csdn.net/detail/wujicai/81 ...
- python concurrent.futures
python因为其全局解释器锁GIL而无法通过线程实现真正的平行计算.这个论断我们不展开,但是有个概念我们要说明,IO密集型 vs. 计算密集型. IO密集型:读取文件,读取网络套接字频繁. 计算密集 ...