For investors
股价:
5.36 美元 %For investors
股价:
5.36 美元 %认真做教育 专心促就业
我们在上文中给大家简单介绍了java编程开发线程与进程的一些基础知识等内容,而本文我们就通过案例分析来了解一下,java编程线程与进程的关系分析。
线程和进程什么关系?
前面说了进程,那有了进程,为啥还要线程,多个应用程序,假设我们每个应用程序要做n件事,就用n个进程不行么?
可以,但是没必要。
进程一般由程序,数据集合和进程控制块组成,同一个应用程序一般是需要使用同一个数据空间的,要是一个应用程序搞很多个进程,就算有能力做到数据空间共享,进程的上下文切换都会消耗很多资源。(一般一个应用程序不会有很多进程,大多数一个,少数有几个)
进程的颗粒度比较大,每次执行都需要上下文切换,如果同一个程序里面的代码段A,B,C,做不一样的东西,如果分给多个进程去处理,那么每次执行都有切换进程上下文。这太惨了。
进程缺点:
信息共享难,空间独立
切换需要fork(),切换上下文,开销大
只能在一个时间点做一件事
如果进程阻塞了,要等待网络传过来数据,那么其他不依赖这个数据的任务也做不了
但是有人会说,那我一个应用程序有很多事情要做,总不能只用一个进程,所有事情都等着它来处理啊?那不是会阻塞住么?
确实啊,单独一个进程处理不了问题,那么我们把进程分得更小,里面分成很多线程,一家人,每个人都有自己的事情做,那我们每个人就是一个线程,一家人就是一个进程,这样岂不是更好么?
进程是描述CPU时间片调度的时间片段,但是线程是更细小的时间片段,两者的颗粒度不一样。线程可以称为轻量级的进程。其实,线程也不是一开始就有的概念,而是随着计算机发展,对多个任务上下文切换要求越来越高,随之抽象出来的概念。
重要的是,进程切换上下文的时间远比线程切换上下文的时间成本要高,如果是同一个进程的不同线程之间抢占到CPU,切换成本会比较低,因为他们共享了进程的地址空间,线程间的通信容易很多,通过共享进程级全局变量即可实现。
况且,现在多核的处理器,让不同进程在不同核上跑,进程内的线程在同个核上做切换,尽量减少(不可以避免)进程的上下文切换,或者让不同线程跑在不同的处理器上,进一步提高效率。
线程和进程的区别或者优点
线程是程序执行的小单位,进程是操作系统分配资源的小单位。
一个应用可能多个进程,一个进程由一个或者多个线程组成
进程相互独立,通信或者沟通成本高,在同一个进程下的线程共享进程的内存等,相互之间沟通或者协作成本低。
线程切换上下文比进程切换上下文要快得多。
【免责声明】:本内容转载于网络,转载目的在于传递信息。文章内容为作者个人意见,本平台对文中陈述、观点保持中立,不对所包含内容的准确性、可靠性与完整性提供形式地保证。请读者仅作参考。更多内容请加danei0707学习了解。欢迎关注“达内在线”参与分销,赚更多好礼。