Java,线程,还有它的并发

     1.并发是如何实现的?

   实现并发最简单得方式就是进程,进程是运行在它自己的地址空间内的自包容的程序。多任务操作系统会周期性将cpu从一个进程切换到另外一个进程,来实现同时运行多个进程。操作系统一般会将进程互相隔离开,不共享内存空间,所以使用进程实现多线程是相对容易的;

   java所使用的并发系统会共享内存,I/O这样的资源,因此实现并发就是要协调不同线程驱动任务之间对这些资源的使用,使这些资源不要同时被多个任务访问;

   为什么不使用进程实现并发呢?

      虽然进程是完全独立的,它们不用任何通信,操作系统会保证文件正确复制的所有问题,你不必对文件的风险有任何的考虑,直接把这些问题全部交给操作系统;   

     但是操作系统对进程的数量和开销是有限的,而对于线程的容纳量是大得多的,高并发用进程实现是不合适的,但是如果是低并发,需求的不同,进程实现也可以(PHP中就是多进程并发);java也是因为高并发的需求,基于性能的考虑,选择线程来实现并发;

   

   2.线程的实现

   线程是比进程更加轻量级的调度执行单位,线程的引入,可以把一个进程的资源分配和执行调度分开,各个线程既可以共享进程的资源(内存空间,I/O等),又可以独立调度(线程是cpu调度的基本单位);

   主流操作系统都提供了对线程的支持,java则提高不同硬件平台及操作系统下对线程的统一处理已经执行了start()方法的java.lang.Thread类的实例就是一个线程。

   Thead类有一个特点,那就是它里面的关键方法都是Native的,所以,你懂得。。。底层的实现跟java毛关系没有,而是通过调用其他的语言函数实现的(因为无法用java来实现或者是java实现效率太低);


         实现线程的三种方式:

         a.使用操作系统内核线程实现    b.使用用户线程实现    c.使用用户线程和轻量级进程实现  

      a.操作系统内核线程详解  后续补上  

      b.一个线程,如果它不是内核线程,那么它就是用户线程。。。用户线程是指线程完全是简历在用户空间的线程库上,跟内核线程没有任何关系,用户线程的创建,同步,销毁和调度是全部在用户态中完成的,操作是非常快速且消耗很低的,所以可以支持规模更大的线程数量,性能牛;

       但是!操作系统有现成的内核线程你不用,那么相当于你自己得写一个线程机制(什么线程的创建,调度,切换都需要自己处理),本来这些应该是操作系统应该做的事。。。操作系统只会把处理器资源分配到进程,所以用户线程的阻塞,多处理器系统如何将线程映射到其他的处理器上,这种问题解决起来相当困难,甚至不可能完成,所以很少有完全使用用户线程的程序。。。

      c.


      Java线程的实现;

      在很久很久以前,jdk1.2之前,java是通过被称为“绿色线程”的用户线程实现的;而现在的jdk呢?这一点在虚拟机里面并没有规定,所以不同的操作系统是不一样的;


         当然,windows与linux基本是一对一的,将一条java线程映射到一个轻量级进程当中,。。。其他的我也不知道,没去查,额



   未完待续。。。

  





  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值