线程和多线程理论

1.线程和多线程定义

线程是程序中一个单一的顺序控制流程。进程内有一个相对独立的、可调度的执行单元,是系统独立调度和分派CPU的基本单位指令运行时的程序的调度单位。在单个程序中同时运行多个线程完成不同的工作,称为多线程。

2.线程和进程的区别

1.进程是资源分配的基本单位。所有与该进程有关的资源,都被记录在进程控制块PCB中。以表示该进程拥有这些资源或正在使用它们。
2.进程也是抢占处理机的调度单位,它拥有一个完整的虚拟地址空间。当进程发生调度时,不同的进程拥有不同的虚拟地址空间,而同一进程内的不同线程共享同一地址空间。
3.与进程相对应,线程与资源分配无关,它属于某一个进程,并与进程内的其他线程一起共享进程的资源。
4.线程是进程中的一个单元,他是不能独立运行的,他必须依赖某个进程。

3.使用多线程的原因

·使用线程可以把占据时间长的程序中的任务放到后台去处理
·用户界面的更新和交互是不能被阻塞的,耗时操作是不能放在主线程的
·当CPU是多核的时候,不同的进程可以实现并行,这样就提高了程序的运行效率
·有些任务并不是连续的,需要等待,比如网络收发数据、用户输入等, 这些操作并不需要等到执行完成,二是需要有变化才操作。

4 多线程使用注意事项

4.1 开辟过多线程的问题

·系统需要为线程开辟存储空间来管理他,线程过多,会占用大量内存。
·线程是通过CPU来调度的,过多的线程会加大CPU的负担,会增加耗电量,还会让机器发烫。

4.2 其他问题

·多个线程同时访问同一数据的访问,要确保数据的安全
·线程死锁

5 线程的生命周期

1.线程创建后放到等待队列中,等待CPU的调度,所以新建只有到就绪一种转换。
2.就绪的是在等待的过程中,没有被CPU执行,不会和其他的线程争夺资源,所以会会变成阻塞状态,只会在运行的状态里切换。
3.运行的线程可以变成就绪、阻塞或者死亡的状态,当时间片到后,线程会进入到就绪状态,当某个线程得不到资源,会被阻塞,当线程执行完成后,线程会死亡。
4.线程死亡后,不会保留线程相关信息,会释放掉占用的内存,所以死亡的线程是无法逆转的。就不可以转成其他几种状态。

6 线程间的通讯

线程间的通信机制实现起来则相对简单,主要包括互斥锁、条件变量、读写锁和线程信号等。
6.1 互斥锁

互斥锁基本原理:互斥锁以排他的方式防止数据被并发修改。当多个线程共享相同的内存时,需要确保每个线程看到的数据是一样的。如果是只读,那么一定是一样的。如果是可读可写,在一个线程操作一个内存区域时,包含三个步骤,即读出数据,修改数据,写回数据。如果该线程在没有写回数据前,另一个线程来访问同一个区域,如果是读,得不到最新的数据状态,如果是写,则会造成数据覆盖等问题。[12306购票]
互斥锁就两个状态:开锁(0),上锁(1)。将某个共享资源和互斥锁绑定后,对该共享资源的访问操作如下:
A】在访问资源前,首先申请该互斥锁,如果在开锁状态,则申请到该锁对象,并立即占有该锁(锁定)。以防其他线程访问修改此资源。如果该锁处于锁定状态,默认阻塞等待。
B】原则上只有锁定该互斥锁的进程才能释放此互斥锁

6.2 条件变量

条件变量通信机制:
1、条件变量基本原理:条件变量的出现,可以弥补互斥锁的缺陷,有些问题仅仅靠互斥锁无法解决。但是条件变量不能单独使用,必须配合互斥锁一起实现对资源的互斥访问

6.3 读写锁

1、读写锁基本原理:在对数据的读写操作时,往往是读占主要部分。为了满足当前能够允许多个读出,但只允许一个写入的需求。线程提供了读写锁来实现。读写锁基本原则如下:
A】如果有其他线程读数据,则允许其他线程执行读操作,但是不允许写操作。
B】如果有其他线程申请了写锁,则其他线程既不能申请读锁,也不能申请写锁

6.4 线程信号:

线程是一种轻量级的进程,因此进程的信号同样适用于线程。不过相对于进程信号,线程拥有与信号相关的私有数据——线程信号掩码,则就决定了线程在信号操作时具有以下特性:
A】每个线程可以先别的线程发送信号,pthread_kill()函数用来完成这一操作。
B】每个线程都可以设置自己的阻塞集合。pthread_sigmask()用来完成这一操作。类似于进程中的sigprocmask()函数。主进程创建出来的线程继承主进程的掩码。
C】每个线程需要设置针对某信号的处理方式,但同一个进程中对某信号的处理方式只能有一个有效,即最后一次设置的处理方式。即在所有的线程里,同一信号在任何线程里的对该信号的处理一定相同
D】如果别的进程向当前进程发来一个信号,具体由哪个线程去处理,是未知的。

注:如果有不准确的地方,欢迎大家来吐槽。QQ:1392984568 一米阳光 (iOS 修炼者 )

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

推荐阅读更多精彩内容

  • 又来到了一个老生常谈的问题,应用层软件开发的程序员要不要了解和深入学习操作系统呢? 今天就这个问题开始,来谈谈操...
    tangsl阅读 4,119评论 0 23
  • 操作系统概论 操作系统的概念 操作系统是指控制和管理计算机的软硬件资源,并合理的组织调度计算机的工作和资源的分配,...
    野狗子嗷嗷嗷阅读 11,921评论 3 34
  • 这是十点鬼事的第三篇鬼故事! 我是黑白, 龙虎山的一名道士, 这是我第一次下山。 我本来好好在大街上轧马路, 突然...
    素食海盗阅读 433评论 0 1
  • 今日剽悍: 1、整理三份群聊分享精华:哲鹏在精读主题营的收获;媛姐分享的面对它、接受它、处理它、放下它,这12个关...
    剽悍文霞阅读 279评论 4 1