进程及线程的一些总结

都知道java多线程编程很重要很历害,但怎么用好多线程呢?业务中为什么要用多线程,以及同时启动多少个线程合适呢?这些问题一直都比较模糊。今天搜罗了一翻,做个总结。

1、首先区别线程与进程的关系 定义(百度):

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

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

实际点:我们要开生日party,这就是一个进程,开party要很多准备,如买饮料,买装饰,布置场地等等,这些都是一个个线程,如果目前只有一个人在操办此事,只能一件件顺序来做,那就是单线程(一个进程必须有一个线程),如果有多个人可以同时操办不同的事情,这时的执行效率提高了,节省了工作时间,这就是多线程。OK!

2、多线程的优点(原文:http://ifeve.com/benefits/):

  • 资源利用率更好
  • 程序设计在某些情况下更简单
  • 程序响应更快。 

  多线程的不利方面:

  • 线程也是程序,所以线程需要占用内存,线程越多占用内存也越多; 
  • 多线程需要协调和管理,所以需要CPU时间跟踪线程; 
  • 线程之间对共享资源的访问会相互影响,必须解决竞用共享资源的问题;
  • 线程太多会导致控制太复杂,最终可能造成很多Bug;

同时启动多少个线程合适?

  • 从进程的角度来说:每个进程是4G的内存空间,其种只一部分是给用户使用的,其余是内核使用的,具体多少跟操作系统关。进程中的所线程公用这一空间。每个线程又自己的堆栈,再win2k下,如果用VC写程序的话,你能使用的地址空间约为2G,,线程的默认堆栈是1M,可以在编译程序时修改。因此可以推算一个进程的线程数也就两千多个。
  • 在jvm中,可以设置虚拟机的内存大小,这个大小决定了线程的数量多少。
  • 但并不是每个业务的线程越多越快,效率越高。因为线程池最大线程数设置过大可能会造成Windows频繁执行上下文切换,降低程序性能。
  • 线程数量要因业务而定。只有经过反复试验,才能得出你的程序开多少线程最合适。
posted @ 2017-03-01 16:58  莫为  阅读(180)  评论(0编辑  收藏  举报