线程,进程,并发

首先我们要理解线程是在进程中运行的,也可以说一个线程必须要有一个装载它的进程。 而一个进程中至少有一个线程在运行。

一个线程可以创建和撤销另一个线程,同一个进程中的多个线程之间可以并发执行。

多线程就是一个进程中有多个线程在运行。那么有什么好处,为什么不做成多进程呢?解释:服务器开辟一个线程所消耗的资源远远小于开辟一个进程所消耗的资源。且维护进程的资源成本高于维护一个线程的资源成本。而程序中的代码就是由线程去运行的(php代码该线程得编译一次再运行,java直接运行字节码)

我们经常听到的apache、nginx、tomcat 都支持多线程开发。多线程模式可以支持更高的网站迸发。

在http协议和https协议中我们可以在request中看到Connection:keep-alive 意思是长连接,既是保持该连接在一定时间内不会断开(你可以在服务器软件nginx、apache等软件中调校keep-alive的有效时间,或者是等待客户端的主动关闭请求,详情查看http协议)。在不会断开的时间内其实就是服务器那边一直在维护你的线程,没有断开这个线程。当你在一定时间内没有再次请求发送到该服务器,那么服务器就会注销掉这个线程释放服务器资源。

如果有时网站崩溃了,你可以检查一下监控time_wait的值是否过高,如果高了说明在这个时段服务器维护的线程(keep-alive的长连接)是比较多的。

进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位。

线程是进程的一个实体, 是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源。

进程和线程的主要差别在于它们是不同的操作系统资源管理方式。进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响,而线程只是一个进程中的不同执行路径。线程有自己的堆栈和局部变量,但线程之间没有单独的地址空间,一个线程死掉就等于整个进程死掉,所以多进程的程序要比多线程的程序 健壮,但在进程切换时,耗费资源较大,效率要差一些。但对于一些要求同时进行并且又要共享某些变量的并发操作,只能用线程,不能用进程。

总结

单进程:一个时间段只能执行一个进程,例如,要听歌就写不了文档

多进程:一个时间段能同时执行多个进程,例如,终于能同时听歌写文档了

多线程:让一个进程能同时执行一段代码的技术,用起来感觉类似于多进程,但区别在于线程与线程间共享资源,所以比多进程节省了系统资源,例如,一个浏览器可以同时打开两个网页。

并发:一个“时间段”有多个程序同时执行,多线程并发和多进程并发应该都算并发,你可以说多进程和多线程是一种技术,并发是一种状态。

并行:可以说是微观上的并发或者真正的并发,就是某一个“时刻”有多个程序同时执行,也是一种状态。

同步:一个函数调用在没结束前原来的函数啥都不能做,是一种目的。

异步:一个函数调用后,原来的函数继续干自己的事情,等那个函数干完后,借助某种手段通知原来的函数执行结果。也是一种目的,一般是通过多线程技术去实现,例:js在遇到ajax时异步调用这个方法,浏览器新建一个线程去处理ajax的事情,js继续干自己的事情,等ajax拿到数据后浏览器将它丢到一个等待队列里面,js干完自己那些不宜中断的事情后就去查询那个队列里面有结果了没,有就拿出来。

猜你喜欢

转载自blog.csdn.net/ahaotata/article/details/83652748
今日推荐