关于线程和进程

来源:互联网 发布:php人脸识别系统实现 编辑:程序博客网 时间:2024/06/03 15:49



线程与进程最大的区别在于内核函数clone函数的flag不同,导致共享资源不同。最终创建、切换耗时不同;以及内存分配、内部通信复杂度不同。

 线程转换?


为什么要做线程转换?

最大限度的去用cpu


什么时候需要做什么时候不需要呢?


Setting_GetMicList

Setting_IsVideoMirrorEffectEnabled


最近,我读到一篇材料,发现有一个很好的类比,可以把它们解释地清晰易懂。

1.

进程与线程的一个简单解释

计算机的核心是CPU,它承担了所有的计算任务。它就像一座工厂,时刻在运行。

2.

进程与线程的一个简单解释

假定工厂的电力有限,一次只能供给一个车间使用。也就是说,一个车间开工的时候,其他车间都必须停工。背后的含义就是,单个CPU一次只能运行一个任务。

3.

进程与线程的一个简单解释

进程就好比工厂的车间,它代表CPU所能处理的单个任务。任一时刻,CPU总是运行一个进程,其他进程处于非运行状态。

4.

进程与线程的一个简单解释

一个车间里,可以有很多工人。他们协同完成一个任务。

5.

进程与线程的一个简单解释

线程就好比车间里的工人。一个进程可以包括多个线程。

6.

进程与线程的一个简单解释

车间的空间是工人们共享的,比如许多房间是每个工人都可以进出的。这象征一个进程的内存空间是共享的,每个线程都可以使用这些共享内存。

7.

进程与线程的一个简单解释

可是,每间房间的大小不同,有些房间最多只能容纳一个人,比如厕所。里面有人的时候,其他人就不能进去了。这代表一个线程使用某些共享内存时,其他线程必须等它结束,才能使用这一块内存。

8.

进程与线程的一个简单解释

一个防止他人进入的简单方法,就是门口加一把锁。先到的人锁上门,后到的人看到上锁,就在门口排队,等锁打开再进去。这就叫“互斥锁”(Mutual exclusion,缩写 Mutex),防止多个线程同时读写某一块内存区域。

9.

进程与线程的一个简单解释

还有些房间,可以同时容纳n个人,比如厨房。也就是说,如果人数大于n,多出来的人只能在外面等着。这好比某些内存区域,只能供给固定数目的线程使用。

10.

进程与线程的一个简单解释

这时的解决方法,就是在门口挂n把钥匙。进去的人就取一把钥匙,出来时再把钥匙挂回原处。后到的人发现钥匙架空了,就知道必须在门口排队等着了。这种做法叫做“信号量”(Semaphore),用来保证多个线程不会互相冲突。

不难看出,mutex是semaphore的一种特殊情况(n=1时)。也就是说,完全可以用后者替代前者。但是,因为mutex较为简单,且效率高,所以在必须保证资源独占的情况下,还是采用这种设计。

11.

进程与线程的一个简单解释

操作系统的设计,因此可以归结为三点:

(1)以多进程形式,允许多个任务同时运行;

(2)以多线程形式,允许单个任务分成不同的部分运行;

(3)提供协调机制,一方面防止进程之间和线程之间产生冲突,另一方面允许进程之间和线程之间共享资源。



线程的优点:

    1.在很多程序中,需要多个线程互相同步或互斥的并行完成工作,而将这些工作分解到不同的线程中去无疑简化了编程模型。

    2.因为线程相比进程来说,更加的轻量,所以线程的创建和销毁的代价变得更小。

    3.线程提高了性能,虽然线程宏观上是并行的,但微观上却是串行。从CPU角度线程并无法提升性能,但如果某些线程涉及到等待资源(比如IO,等待输入)时,

多线程允许进程中的其它线程继续执行而不是整个进程被阻塞,因此提高了CPU的利用率,从这个角度会提升性能。

    4.在多CPU或多核的情况下,使用线程不仅仅在宏观上并行,在微观上也是并行的。

    这里值得注意的是,上面的两个线程如果改成两个进程,那么达不到所要的效果,因为进程有自己独立的内存地址空间,而线程共享进程的内存地址空间




什么是线程?

这个需要仔细看

http://blog.csdn.net/zqm201/article/details/45011309

http://blog.chinaunix.net/uid-26430381-id-3746859.html

http://www.jianshu.com/p/4bc9bd138034

为啥引入线程?

什么时候引入线程?

多半是资源分配原因。进程一般至少有一个主线程,负责和用户交互,为了体验好,一些CPU密集或者操作磁盘网络之类的东西放到其他线程。

每个API调用都是有成本的,要尽量精确的算出来它消耗多少时间,如果坏到影响用户体验,就要引入多线程了。另外,如果是计算密集型程序,

比如编译代码,为了尽量提高CPU的利用率,都创建了和CPU内核数一样多的线程来执行。


线程与进程最大的区别在于内核函数clone函数的flag不同,导致共享资源不同。最终创建、切换耗时不同;以及内存分配、内部通信复杂度不同。

 线程转换?


为什么要做线程转换?

最大限度的去用cpu


什么时候需要做什么时候不需要呢?


Setting_GetMicList

Setting_IsVideoMirrorEffectEnabled


最近,我读到一篇材料,发现有一个很好的类比,可以把它们解释地清晰易懂。

1.

进程与线程的一个简单解释

计算机的核心是CPU,它承担了所有的计算任务。它就像一座工厂,时刻在运行。

2.

进程与线程的一个简单解释

假定工厂的电力有限,一次只能供给一个车间使用。也就是说,一个车间开工的时候,其他车间都必须停工。背后的含义就是,单个CPU一次只能运行一个任务。

3.

进程与线程的一个简单解释

进程就好比工厂的车间,它代表CPU所能处理的单个任务。任一时刻,CPU总是运行一个进程,其他进程处于非运行状态。

4.

进程与线程的一个简单解释

一个车间里,可以有很多工人。他们协同完成一个任务。

5.

进程与线程的一个简单解释

线程就好比车间里的工人。一个进程可以包括多个线程。

6.

进程与线程的一个简单解释

车间的空间是工人们共享的,比如许多房间是每个工人都可以进出的。这象征一个进程的内存空间是共享的,每个线程都可以使用这些共享内存。

7.

进程与线程的一个简单解释

可是,每间房间的大小不同,有些房间最多只能容纳一个人,比如厕所。里面有人的时候,其他人就不能进去了。这代表一个线程使用某些共享内存时,其他线程必须等它结束,才能使用这一块内存。

8.

进程与线程的一个简单解释

一个防止他人进入的简单方法,就是门口加一把锁。先到的人锁上门,后到的人看到上锁,就在门口排队,等锁打开再进去。这就叫“互斥锁”(Mutual exclusion,缩写 Mutex),防止多个线程同时读写某一块内存区域。

9.

进程与线程的一个简单解释

还有些房间,可以同时容纳n个人,比如厨房。也就是说,如果人数大于n,多出来的人只能在外面等着。这好比某些内存区域,只能供给固定数目的线程使用。

10.

进程与线程的一个简单解释

这时的解决方法,就是在门口挂n把钥匙。进去的人就取一把钥匙,出来时再把钥匙挂回原处。后到的人发现钥匙架空了,就知道必须在门口排队等着了。这种做法叫做“信号量”(Semaphore),用来保证多个线程不会互相冲突。

不难看出,mutex是semaphore的一种特殊情况(n=1时)。也就是说,完全可以用后者替代前者。但是,因为mutex较为简单,且效率高,所以在必须保证资源独占的情况下,还是采用这种设计。

11.

进程与线程的一个简单解释

操作系统的设计,因此可以归结为三点:

(1)以多进程形式,允许多个任务同时运行;

(2)以多线程形式,允许单个任务分成不同的部分运行;

(3)提供协调机制,一方面防止进程之间和线程之间产生冲突,另一方面允许进程之间和线程之间共享资源。



线程的优点:

    1.在很多程序中,需要多个线程互相同步或互斥的并行完成工作,而将这些工作分解到不同的线程中去无疑简化了编程模型。

    2.因为线程相比进程来说,更加的轻量,所以线程的创建和销毁的代价变得更小。

    3.线程提高了性能,虽然线程宏观上是并行的,但微观上却是串行。从CPU角度线程并无法提升性能,但如果某些线程涉及到等待资源(比如IO,等待输入)时,

多线程允许进程中的其它线程继续执行而不是整个进程被阻塞,因此提高了CPU的利用率,从这个角度会提升性能。

    4.在多CPU或多核的情况下,使用线程不仅仅在宏观上并行,在微观上也是并行的。

    这里值得注意的是,上面的两个线程如果改成两个进程,那么达不到所要的效果,因为进程有自己独立的内存地址空间,而线程共享进程的内存地址空间




什么是线程?

这个需要仔细看

http://blog.csdn.net/zqm201/article/details/45011309

http://blog.chinaunix.net/uid-26430381-id-3746859.html

http://www.jianshu.com/p/4bc9bd138034

为啥引入线程?

什么时候引入线程?

多半是资源分配原因。进程一般至少有一个主线程,负责和用户交互,为了体验好,一些CPU密集或者操作磁盘网络之类的东西放到其他线程。

每个API调用都是有成本的,要尽量精确的算出来它消耗多少时间,如果坏到影响用户体验,就要引入多线程了。另外,如果是计算密集型程序,

比如编译代码,为了尽量提高CPU的利用率,都创建了和CPU内核数一样多的线程来执行。

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 上衣剪了个洞怎么办 上衣破了个洞怎么办 鸟屎腐蚀车漆怎么办 毛风衣叠久了怎么办 黑色的衣服沾毛怎么办 雪纺裙子弄上油怎么办 内衣买小了怎么办妙招 长裤衬衫裙邹了怎么办 100棉衬衣皱了怎么办? 短袖t恤袖口大了怎么办 短袖底下卷边了怎么办 棉质短袖衫缩水怎么办 纯棉t恤缩水了怎么办 t恤缩水变小了怎么办 衣服掉在雨棚上怎么办 车衣密码锁忘记密码怎么办 衣服的铁拉链弯怎么办 去旅行衣服皱了怎么办 衣服抽绳出来了怎么办 裤子的绑带掉了怎么办 网纱裙的边卷了怎么办 堵奶宝宝吸不通怎么办 棉麻裙子掉毛怎么办 10个月宝宝吃手怎么办 婴儿连体衣长了怎么办 冰丝面料变长了怎么办 t恤袖口大了怎么办 长袖t恤袖子长了怎么办 机打的扣子掉了怎么办 四个月宝宝头扁怎么办 鞋子前面穿翘了怎么办 休完产假没人带怎么办 休完产假孩子吃奶怎么办 巴布豆童鞋里面臭了到底怎么办 连体裤有点卡档怎么办 宝宝连体衣扣子掉了怎么办 买衣服被骂了怎么办? 把人车刮了跑了怎么办 打工打不下去了怎么办 白色衣服变粉了怎么办 一量血压就紧张怎么办