进程和线程的区别
- 线程是属于进程的,所以说线程是一个轻量级的进程
- 进程是资源分配的最小单位,线程是CPU调度的最小单位
- 进程拥有自己独立的空间,而线程则是共享他的储存空间(堆存储,数据段和代码段),但是拥有自己独立的栈段
- 系统开销,进程的系统开销较大,在创建进程的时候进程的时候,系统都要为他分配和回收资源,而且切换的时候需要CPU的帮助,而线程只是需要一些寄存器的帮助,并不牵扯存储器
- 通信:进程的通信需要IPC,同步互斥等方式来实现通信,而线程由于共享内存空间,他们的同步和通信变得容易
- 进程之间不会相互影响,而线程之间一个挂掉都会导致全部挂掉
- 进程适合多核,多机分布,线程适合多核
并发和并行
并发: 指的是宏观上两个同时运行,微观上交叉运行,可以提升效率,但不能提高性能
并行:严格物理意义上的并行通信,相互不影响
线程间的同步方式
信号量:sem_wait sem_post
互斥量:pthread_muetx_lock pthread_mutex_unlock
条件变量: pthead_cond_signal
线程通信的方法
- 临界区
- 互斥量:只能有一个人来读取内容
- 信号量:可以让多个线程同时访一个资源(线程池)
- 事件:通知的方式