多线程编程基本概念梳理

    如果所做的产品最终是面向市场的,那么就不得不面对并发的问题,所以在多线程编程的过程中,有很多概念需要,因为平时很容易遇到并混淆:

进程和线程

进程是程序的一次执行。在用户下达运行程序的命令后,就会产生进程。
线程则是进程中的部分执行的代码段,如果进程是房子,则线程就是房子里的人了。房子只是装人的容器,而真正的功能却是要靠人来实现。同样一个房子里可以只住一个人,也可以住很多人,所以一个进程可以只有一个人,也可以有很多人。当"人"很多的时候,就是我们常说的多线程的情况了。

串行、并行和并发

串行就如同我们排队,是一个一个来的,而并行则是排了很多队,大家一起来。要借助于多核CPU才能实现。而并发却是单核也可以实现,只要在宏观上看起来是多个任务在同时进行即可,也就是说单核CPU依然可以靠着告诉切换线程来实现该情况。

高并发与多线程之间的关系

高并发值的是在短时间内有大量的请求需要服务器做出响应的一种情况,是一种服务器的状态,而多线程则是解决高并发的一种解决方案,二者不是相同的概念,不能混为一谈。

同步与异步,阻塞与非阻塞

    同步与异步是相对于被调用者而言的(一般就是值服务端),当是同步时,在得到结果之前,被调用者不会返回任何结果,而异步则是在得到请求后便做出了响应,在得到结果后再返回结果给调用者(一般是客户端)。相当于用调用者在结果返回前还能不能做别的事情来判断是同步还是异步。就比如你在一家陌生的超市买了东西,却发现没带钱,只好用店家借的电话打电话让你爸妈来付钱,而超市只会在你爸妈来付完钱后才放你走,这就是同步。而如果你是在亲戚家的超市,只需让你父母告诉超市一声你待会来付,接着你就能去做别的事情了,而没必要非要等到你爸妈付了钱才能走,这就是异步。
    阻塞与非阻塞是相对于调用者而言的,就如上文中的我,在第一种情况下是阻塞的,而在第二种情况下就是非阻塞状态的。
    千万不要认为阻塞并非就是同步,非阻塞就是异步,其实是没有必然联系了。如知乎上所举的例子:
在这里插入图片描述
当你在被困商场时你一样可以再去逛逛商场,再买点东西。或者看看电视之类的,只要过几分钟来看一下爸妈到了没有就行了(非阻塞),而非必须在原地等待(阻塞),只不过是无法去超市外进行活动了而已(同步);

发布了37 篇原创文章 · 获赞 10 · 访问量 755

猜你喜欢

转载自blog.csdn.net/weixin_41746577/article/details/102601975