进程、线程、CPU核数之间的关系(附加select细节)

您所在的位置:网站首页 多线程最大线程数是什么 进程、线程、CPU核数之间的关系(附加select细节)

进程、线程、CPU核数之间的关系(附加select细节)

2024-07-15 19:00| 来源: 网络整理| 查看: 265

前言:为什么要开线程?

目的

(1)是想等一个子程序执行完毕了,然后在继续操作!用启动线程,不然界面和别的进程无法工作,程序完了就完了没有如何效果和后续功能,然后用线程启动然后线程等待,比如摄像头不停的捕获图像,鼠标键盘任何时候输入都有效,开启后CPU会给这个进程分配专用的内存空间核cpu时间资源。

(2)其实很像中断函数一样,对一个函数开启线程后,当它处于等待IO发生动作后去执行比如键盘按下消息,没有按下时,一直处于阻塞,这是线程交出cpu,去执行其它线程或进程,如果你用while(1){},cpu会一直被占用,我们使用各种中断,也是为了避免while(1)卡住,而开线程后内核内部的调度机制会合理的分配cpu,比中断还要高级。

(3)开线程后,每个线程有独立的栈,当线程阻塞时,内存数据不会被释放,cpu被释放执行其他线程

(4)开线程后,当A线程的某个函数阻塞时,会交出CPU去B线程里面执行这时可能B的某个函数阻塞,去执行C线程,这样3个阻塞函数都被执行并等待条件到来,如果不开线程,三个阻塞函数在一个线程里面,只能永远在一个函数,其他2个阻塞函数不会执行并等待条件到来

 

1 程序与进程、线程的关系

(1)程序只是一组指令的有序集合,它本身没有任何运行的含义,它只是一个静态的实体。而进程则不同,它是程序在某个数据集上的执行。进程是一个动态的实体,它有自己的生命周期。它因创建而产生,因调度而运行,因等待资源或事件而被处于等待状态,因完成任务而被撤消。反映了一个程序在一定的数据集上运行的全部动态过程。

(2)进程和程序并不是一一对应的,一个程序执行在不同的数据集上就成为不同的进程,可以用进程控制块来唯一地标识每个进程。而这一点正是程序无法做到的,由于程序没有和数据产生直接的联系,既使是 执行不同的数据的程序,他们的指令的集合依然是一样的,所以无法唯一地标识出这些运行于不同数据集上的程序。一般来说,一个进程 肯定有一个与之对应的程序,而且只有一个。而一个程序有可能没有与之对应的进程(因为它没有执行),也有可能有多个进程与之对应(运行在几个不同的数据集上)。

(3)不同的进程可以执行同一段程序,比如读同一个文件数据,他们的读函数代码相同,并被2个进程或线程运行了。

(4)一般的,我们写的一个不同程序,没有单独开线程,默认这个程序的一次运行就是一个单进程单进程。如果我们调用fork,这时就会有2个进程,调用pthread,则这个进程就会有2个线程,一个是程序本身的函数while(1)不结束的执行,一个是开启的线程  

2 单核cpu处理程序

2.1 单进程多线程处理

        (1)在一个应用程序里,添加键盘、鼠标功能,这就是单进程2线程,如果键盘线程获取了锁,那么这个线程将获取CPU的运行时间,其他线程将被阻塞。但CPU始终处于运行状态,影响计算时间的其实只是加锁和解锁的时间。并不会发生CPU空闲的现象。cpu利用率100%

        线程阻塞:一般是被动的,在抢占资源中得不到资源,被动的挂起在内存,等待某种资源或信号量(即有了资源)将他唤醒。(释放CPU,不释放内存)

2.2 多进程处理

        (1)将键盘、鼠标分别写出两个独立的应用程序,独立运行,与上面不同的是,进程间通信如果要交换数据很麻烦,需要很多步骤,效率低

 

3 多核cpu处理程序 3.1 单进程多线程处理(线程可以夸核处理,进程之间不能,就像QQ不能访问支付宝一样,安全性)         3.1.1 与单核对比区别在于,如果A核处理的键盘线程阻塞时,B核被空闲,CPU工作效率下降一半         3.1.2 没有阻塞时,比如用QQ的A线程听歌,B线程发消息,多核CPU效率比单核快很多

            (1)比如QQ有4个线程用4个核处理分别需要20+5+3+2ms,处理完的总时间为20ms,实际上需要30/20=1.5个核处理最合理,一个处理20ms,一个处理5+3+2ms,4个核的效率则为1.5/4=37.5%

              (2)优化负载后,分配时间为10+7+7+6ms,30/10/4=75%,效率提高了,通过系统的处理可以最优化到每个线程的处理时间为30/4=7.5ms,效率就为100%

3.2 多进程多线程处理(就像电脑上,不同的应用程序,不可能一个进程融合QQ、支付宝、暴风等)

        (1)比如A核处理QQ,BCD核不能用来处理QQ,不能夸核处理,这一点上和单核一样,但是多核可以用B核处理支付宝进程,对于单核,它要一个人处理2个进程,时间上会慢,就会出现平时的卡顿

 

  4  可以从进程与线程的区别考虑 4.1  进程,处理任务量多,每个进程具有独立的内存单元,占用CPU资源相对较多。

        (1)进程间通信就像a.out和b.out之间通信,两个程序之间的通信,所以相对复杂

        (2)在Linux 中每一个进程都由task_struct 数据结构来定义. task_struct就是我们通常所说的PCB.她是对进程控制的唯一手段也是最有效的手段,它记录了这个进程的所有信息,包括这个进程执行过程中,申请的内存空间,在这个结构体中都有记录,所以其他进程无法访问数据,QQ与支付宝就是,但是也有专门的函数让两个进程共享内存空间。

        (3)进程申请堆内存后,只是分配了虚拟地址空间,等进程被实际运行,并使用这段内存是才会映射到物理空间。

        (4)缺点:进程间切换开销大,10万人打仗,30万人运粮,进程间通信麻烦,效率低

4.2  线程,处理任务相对可以较少,同时为了处理并发性能,它们共享内存单元,占用资源少。 4.2.1 线程间通信

        (1)就像函数间通信一样,比如一个编译出来的可执行程序a.out,里面有一个main函数,main是主线程,主线程里面调用pthread_create是一个开启的新的子线程,所以在函数里面定义一个全局变量,两个线程(即两个函数)都能用,线程间共享内存。

            void *func(void *arg)             {                     读键盘处理函数             }             void main()             {                  pthread_create(&th,NULL,func,NULL);                  while(1)                   {                               //读鼠标处理函数                   }

             }

5 select函数

(1)如果线程内使用select监听几个IO,每路IO本身是阻塞,被select之后对内非阻塞,整体select对外阻塞,只要返回值为正,说明一定有IO发生,进入对应的IO处理,执行函数时,这个函数一定不会阻塞住,因为能进去说明这个函数IO一定有动作

 

6  总结:

(1)进程是一个实体。每一个进程都有他自己的内存地址段(heap,stack等等),进程是执行中的程序。

(2)程序是一个没有生命的实体,只有处理器赋予程序生命时,它才能成为一个活动的实体。

(3)线程,又是被称为轻量级进程(Lightweight Process LWP),是程序执行的最小单元。每一个程序都至少有一个线程,若程序只有一个线程,那么就是程序本身。单线程的进程可以简单的认为只有一个线程的进程。一个进程在同一时间只做一件事,有了多线程后一个进程同一时间可以做多件事。每个线程可以处理不同的事务。无论系统有几个CPU,即使进程运行在单CPU上,多线程也可以是进程并发处理多个事务。一个线程阻塞不会影响到另一个线程。多线程的进程可以尽可能的利用系统CPU资源。但也不是线程越多越好,线程越好,CPU分配给每个线程的时间片就越少。

(4)线程包含了表示进程内执行环境必须的信息,包括标识线程的线程ID,一组寄存器值,栈,调度优先级和策略,信号屏蔽字,errno变量以及线程私有数据,对于内存,堆内存和代码区一般属于一个进程的,但是栈却是属于一个线程的,每个线程都拥有一个独立的栈。errno也是属于单个线程的,每个线程中的errno是独立的。进程内所有的信息对于线程都是共享的,包括执行代码,全局变量,和堆内存,栈以及文件描述符。 线程标识 --就像每个进程有个进程ID一样,线程也有自己的ID。 --进程ID用pid_t来表示,他是一个unsigned int. --线程可以通过pthread_t表示,pthread_t不能把它当整数处理。

--线程可以通过pthread_self()函数获得自身的线程ID

(5)单线程的进程可以简单的认为只有一个线程的进程。一个进程在同一时间只做一件事、所以一个线程只能有一个对外阻塞函数存在,但是可以使用select(),将阻塞函数放在里面,对内非阻塞,整体对外阻塞

(6)多线程中一个线程阻塞,交出CPU去执行其它线程,单线程阻塞,CPU被占用就像while(1),卡住

(7)单核cpu多个进程或一个线程内能实现并发(微观上的串行,宏观上的并行),多核cpu线程间可以实现微观上并行

 

 

 

 

 

 

 

 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3