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虚 ...
随机推荐
- Download the Hibernate Tools
首先去官网上下载最新版本的Hibernate Tools JBoss Tools 4.5.0.Final Requirements: Java 8 and Eclipse Oxygen 4.7 有 4 ...
- Matlab入门学习(文件读写)
一.save,load >> a=[ ]; >> b=[ ] b = >> save('b.mat','a','b');%a file named b.mat wi ...
- 最详细的cookie和浏览隐私之间的关系
本文所说的"cookie",指的是浏览器相关的 cookie(也叫"HTTP cookie"). 浏览器 cookie 的主要功能是:帮助网站保存一些小片段的信 ...
- 【个人笔记】《知了堂》node.js简介及创建应用
Node.js是什么? Node.js是建立在谷歌Chrome的JavaScript引擎(V8引擎)的Web应用程序框架.Node.js自带运行时环境可在Javascript脚本的基础上可以解释和执行 ...
- 深入理解计算机系统chapter1
---恢复内容开始--- 预处理器+编译器+汇编器+链接器=编译系统 运行hello程序 操作系统: 无论是在单核还是多核系统中,一个CPU看上去都在并发的执行多个进程,这是通过处理器在进程间切换来实 ...
- CentOS 引导 Win10 启动项
因为无聊,所以想尝试一下双系统,所以在win10的基础之上,装了一个Linux系统,之前装过Ubuntu,几乎都是自动完成的无任何压力.但是想着Ubuntu好像更新换代有点快,所以换了个能用比较久的C ...
- Eddy's爱好 hdu2204
Eddy's爱好 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Su ...
- http://codeforces.com/problemset/problem/545/D
D. Queue time limit per test 1 second memory limit per test 256 megabytes input standard input outpu ...
- 当前页面的url未注册 微信支付
原因1:公众号支付授权目录或测试授权目录设置不正确. 原因2:微信SDK"WxPay.JsApiPay.php"文件中GetOpenid方法中$baseUrl的拼接的结果与支付授权 ...
- Java历程-初学篇 Day06 循环结构
前记:永远不要写死循环 一,while循环 先判断,再执行 while(条件){ //代码块; 迭代; } 示例: 二,do while语句 先执行一次,再判断 do{ //代码块; 迭代; }whi ...