多线程与多进程 线程安全

多核多线程多进程

任务调度

操作系统一般都会采用时间片轮转的抢占式调度

image

进程

操作系统是计算机的管理者,它负责任务的调度、资源的分配和管理,统领整个计算机硬件。进程是操作系统分配资源的最小单位。进程是一个程序的一次动态执行过程。进程由程序、数据和进程控制块组成。其中进程控制块包含进程的描述信息和控制信息,是进程存在的唯一标志。

进程的特征:

  • 动态性: 进程只是程序的一次执行过程,是临时的,有生命周期的。动态产生,动态消亡
  • 并发性: 任何进程都可以和其他进程一起并发执行
  • 独立性: 进程是操作系统和进行资源分配和调度的一个独立单位
  • 结构性: 进程由程序 数据 进程控制块组成

线程

早期的计算器系统没有线程的概念,只有进程。这时,进程是资源分配的最小单位,也是程序执行的最小单位,每个进程之间独立,每个进程拥有自己独立的内存

随着计算机的发展,进程之间切换开销大的弊端不断凸显,无法满足越来越复杂的程序,于是出现了线程,线程变成了程序执行的最小单元。一个进程可以有一个或者多个线程,各个线程之间共享程序的内存空间(进程所在的内存空间)。线程由线程ID,当前指令指针(PC)、寄存器和堆栈组成

进程和线程的关系

  • 线程是程序执行的最小单位,进程是操作系统资源分配的最小单位
  • 一个进程由一个或者多个线程组成,线程是一个进程中代码的不同执行路线
  • 进程之间相互独立名,但是一个进程下的多个线程共享内存空间
  • 调度和切换:线程之间的切换速度比进程之间的切换要快很多

一个进程包括多个线程示意图

image

相比于单线程 多线程实际上就是时间片轮转 实现并发

image

总之,线程和进程都是一种抽象的概念,线程是一种比进程更小的抽象,线程和进程都可用于实现并发。

每个进程中的内容 每个线程中的内容
地址空间 程序计数器
全局变量 寄存器
打开文件 堆栈
子进程 状态
即将发生的报警
信号与信号处理程序
账户信号
同步、互斥信号量

多核和多线程

多核(心)处理器是指在一个处理器上集成多个运算核心从而提高计算能力,也就是有多个真正并行计算的处理核心,每一个处理核心对应一个内核线程。程序一般不会直接去使用内核线程,而是去使用内核线程的一种高级接口——轻量级进程(Light Weight Process,LWP),轻量级进程就是我们通常意义上所讲的线程(我们在这称它为用户线程)

用户线程与内核线程的对应关系有三种模型:一对一模型、多对一模型、多对多模型,在这以4个内核线程、3个用户线程为例对三种模型进行说明。

一对一模型

优点:

  • 真并行 不堵塞

缺点:

  • 程序并行数量收到内核线程的限制
  • 用户线程切换开销大
image

多对一模型

优点

  • 用户线程切换速度快

缺点:

  • 某个用户线程堵塞,会导致内核线程堵塞
image

多对多模型

优点

  • 一个用户线程阻塞不会导致所有线程阻塞
  • 用户线程数量没有限制

线程安全

线程不安全:多个线程同时访问一个数据,并且对数据做不同的改变,这个时候数据乱了,也就是线程不安全

如何保证线程安全?限制多个线程访问一个数据时,一次只允许一个线程访问该数据,只有这个线程对该数据访问结束之后,其他线程才能访问该数据。同步(synchronization) 同步最常见的方式就是使用锁(Lock),也称为线程锁。锁是一种非强制机制,每一个线程在访问数据或资源之前,首先试图获取(Acquire)锁,并在访问结束之后释放(Release)锁。在锁被占用时试图获取锁,线程会进入等待状态,直到锁被释放再次变为可用。

一个生动的例子:

假设你在工行有一个银行账户,两张银联卡(自己手里一张,女朋友手里一张),里面有100万。假设取钱就两个过程:1.检查账户余额,2.取出现金(如果要取出的金额 > 账户余额,则取现成功,否则取现失败)。有一天你要买房想把钱取出来,而此时你女朋友也想买一辆车(假设你们事先没有商量)。两个人都在取钱,你在A号ATM机取100万,女朋友在B号ATM机取80万。这时A号ATM检查账户余额发现有100万,可以取出;而与此同时,同一时刻B号ATM也在检查账户余额发现有100万,可以取出;这样,A、B都把钱取出来了

几个问题

  1. 单核cpu能实现多进程吗?

    可以。操作系统会使用时间片轮转的方法实现并发,实现多任务,实现多进程

    image

    这张图是我的电脑的资源管理器截图,可以看到我的cpu是四核八线程,我的进程数200+,线程数2500+

参考:

https://blog.csdn.net/luoweifu/article/details/46701167

https://blog.csdn.net/u012398362/article/details/51475213

https://blog.csdn.net/luoweifu/article/details/46595285

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,839评论 6 482
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,543评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,116评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,371评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,384评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,111评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,416评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,053评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,558评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,007评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,117评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,756评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,324评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,315评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,539评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,578评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,877评论 2 345

推荐阅读更多精彩内容