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虚 ...
随机推荐
- 认识StringBuffer类
概述: StringBuffer类是线程安全的可变字符序列 线程安全效率低 StringBuffer和String的区别 * String是一个不可变的字符序列 * StringBuffer是一个可变 ...
- String类的一些常见的获取方法(5)
String s = "aasfasfdtgsrast"; 1: int a = s.length() //返回字符串的长度 2: char s1 = charAt(int in ...
- Spring事务源码阅读笔记
1. 背景 本文主要介绍Spring声明式事务的实现原理及源码.对一些工作中的案例与事务源码中的参数进行总结. 2. 基本概念 2.1 基本名词解释 名词 概念 PlatformTransaction ...
- Robberies hdu 2955 01背包
Robberies Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total S ...
- HDU1698 线段树(区间更新区间查询)
In the game of DotA, Pudge's meat hook is actually the most horrible thing for most of the heroes. T ...
- SQL Server XML数据解析
--5.读取XML --下面为多种方法从XML中读取EMAIL DECLARE @x XML SELECT @x = ' <People> <dongsheng> <In ...
- 前端要革命?看我在js里写SQL
在日新月异的前端领域中,前端工程师能做的事情越来越多,自从nodejs出现后,前端越来越有革了传统后端命的趋势,本文就再补一刀,详细解读如何在js代码中执行标准的SQL语句 为什么要在js里写SQL? ...
- 根据Dockerfile创建docker dotnet coer 镜像
那我们先来看看Dockerfile文件内容,注意这个文件是没后缀名的. #依赖原始的镜像,因为我们是要创建dotnet coer镜像,所以我就用了官方给的镜像[microsoft/dotnet:lat ...
- php中各种定义变量的方法
1.定义常量define("CONSTANT", "Hello world."); 常量只能包含标量数据(boolean,integer,float 和 s ...
- [置顶]
win10 uwp 参考
态度随意申请专栏,没想到通过 看了我的博客,都是在别的大神博客看到,然后修改他们的 我看到的大神博客 东邪独孤 http://www.cnblogs.com/tcjiaan/ 老周,买了他的<W ...