线程,进程,并发

Posted zhiminzeng

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了线程,进程,并发相关的知识,希望对你有一定的参考价值。

一、基本概念理解

并发:一个程序同时执行多个独立的任务,并发的主要目的是提高性能(同时可以做多个事情)

以前的单核CPU,某一时刻只能执行一个任务, 有操作系统调度,每秒执行多次所谓的“任务切换”,实现并发的假象。而且上下文切换需要时间开销(比如操作系统要保存你切换时的各种状态,变量或状态的存储,执行进度信息,都需要时间开销)

对于多核CPU,如果任务数小于核数,可以实现真正意义上的并发(硬件并发)

进程:可执行程序运行起来,就叫创建了一个进程

线程:每个进程(执行起来的可执行程序)都有一个主线程(自动生成,启动),每个进程只能有一个主线程

实际上运行程序的时候,实际上是进程的主线程执行main()函数中的代码,主线程与进程的生存期相同

所以可以把进程理解为 :用来执行代码的,一条代码的执行通路

多线程:除了主线程之外,我们可以用代码来创建其他的线程,每创建一个新线程,就可以在同一时刻,多干一件不同的事情。

线程并不是越多越好,每个线程都需要一个独立的堆栈空间(约1M),多线程并发时,线程之间的切换要保存很多中间状态。切换回耗费程序本该运行的时间,所以线程不是越多越好。

多线程如果同时访问同一块资源效率不高,但如果同时访问不同的资源,多线程的效率会很高

 

二、并发

1、多进程并发

进程间通信:同一台电脑上:管道通信、文件通信、消息队列、共享内存

                     不同电脑上:socket通信技术

2、多线程并发

单个进程中,创建了多个线程,每个线程都有自己独立的运行路径,但是一个进程中所有线程共享地址空间(共享内存),例如:全局变量,全局指针,全局引用都可以在线程之间传递。所以使用多线程开销远远小于多进程。

共享内存带来的问题,数据一致性问题(多个线程都要往一块内存空间存储数据)

3、小结

和进程相比,线程的优点

(1)线程启动速度更快,更轻量级

(2)系统资源开销更少,执行速度更快,比如共享内存这种通信方式比任何其他的通信方式都快

缺点

(1)要小心处理数据的一致性问题

 

以上是关于线程,进程,并发的主要内容,如果未能解决你的问题,请参考以下文章

python并发编程:多线程,多进程

Java并发编程之美之并发编程线程基础

并发线程、进程和多核

线程进程与程序+并行与并发

Java 并发编程线程简介 ( 进程与线程 | 并发概念 | 线程间通信 | Java 并发 3 特性 )

01_认识进程和线程