线程

来源:互联网 发布:javascript做表格 编辑:程序博客网 时间:2024/05/12 07:03

1、启动线程

1)计算机启动,执行第一个程序BIOS

2)然后是init进程的产生

3)之后又init进程或其子进程..等fork出来

2、线程和进程之间的小区别

1)执行代码的区别

​ 线程一旦创建,就会默认去执行线程函数,之后如果没有被join,就从线程函数中默认结束

    ​进程的代码会输出两次,原因是fork之后的进程父进程和子进程都会执行剩余的代码,并且对于代码的原则是如果子进程没有exec,那么实际上父子进程执行的代码应该一样,所以共用一份,如果子进程要exec,那么再复制一份,为其开辟自己的空间

​2)数据域的区别

​线程之间共享进程的数据,子线程还会共享主线程的变量、堆栈、地址空间等,但它还会有自己的唯一的线程ID、私有数据等

子进程虽会继承父进程的某些值,但一旦修改这些值,子进程还会有自己的空间去保存这些值

3、一个进程能开多少线程

32位操作系统支持4G大小的虚拟地址空间,Linux默认会为内核分配1G左右,剩下3G就能用了创建线程

最大线程数 = 3G / 一个线程的空间​

4、如何正确使用线程?数量越多越好?

​参考: LinuxC多线程求和

据实际情况而论​

​5、拓展

1)协程

​这个概念实际上我们可以把它理解为在用户态模拟的线程,因此我们可以自己定义协程的结构,这样就使得协程的大小可以很小,而且通过程序之间的控制逻辑使得他们不一定按照顺序执行,从而便于并发,具体请参考:

协程—廖雪峰

2:并发语言Erlang

Erlang天生支持并发,这个语言1~2秒之内能并发出那么多进程(不是操作系统的概念),参考:

Erlang并发编程

3:“池”化思想

这也是并发处理一种非常简单和基本的思想,先初始化好资源,然后等着服务临,参考我自己的这篇博客:

Linux&C实现简单线程池

0 0
原创粉丝点击