线程与进程

程序设计的目标
性能:高性能的程序应该能够等同于CPU的利用率,CPU的利用率越高(一直在工做,没有闲下来的时候),程序的性能越高。
体验:这里的体验不仅是界面多么漂亮,功能多么顺手,这里的体验指程序的响应速度,响应速度越快,用户体验越好。
Socket网络编程
在同一个JVM运行环境中,类与类之间能够直接相互调用,可是处于不一样的JVM中的类,它们之间是没法直接调用的,这时经过Socket网络编程可让处于不一样JVM、甚至不一样计算机的类之间进行通信。
Socket:至关于电话座机
IP:至关于电话号码
Socket的API经常使用方法:
accept()--阻塞;
getInputStream()--获取网络链接输入流
getOutputStream()-- 获取网络链接输出流编程

单线程多任务IO阻塞(例如:磁盘操做)时CPU空闲---解决方案:[单线程多任务异步IO --让准备好的任务优先执行]
单线程多任务,有耗时计算 即CPU计算耗时阻塞----解决方案:[多线程程序(可进行任务执行切换)]
多CPU执行效果更好,但决定如何分配难,也就是多核下的线程同步与互斥
进程:在操做系统中运行着的一个独立的程序(桌子)
线程:一个进程中一条独立的执行分支。(一我的)
多线程与多进程:
一群人(多个线程)在一个桌子(进程)上吃饭,他们会涉及到一些问题,好比多我的可能会夹一个菜(竞争),A和B同时看到盘子里面有一块肉,同时伸出筷子去夹,A先夹走,B迟了一点伸到盘子的时候已经没了,只能缩回来(临界资源,互斥),有一个点心须要用馍夹肉一块儿吃。A夹了肉,B夹了馍,A须要B的馍,B须要A的肉,他们僵持不下谁都不让步(死锁)。 网络

多线程之间的资源共享是很是方便的,由于他们共用进程的资源空间(在一个桌子上),可是须要注意一系列的问题,竞争,死锁,同步等。若是在旁边再开一个桌子(进程)。 那么桌子之间讲话,递东西又不方便(进程间通讯),而开一个桌子的开销比在一个桌子上多加一我的的开销要大。另一个桌子上的人数不可能无限制增长,桌子的容量有限也坐不下这么多人(进程的线程句柄是有限制的)。一个桌子坏了不会影响到另外一个桌子上面人的就餐状况(进程间相互DuLi,一个进程崩溃不会影响另外一个),而一个桌子上的某人喝挂了须要送医院,估计这一桌人都要散了(线程挂掉会致使整个进程也挂掉)。因此多线程与多进程是各有优缺点,不能一律而论。
总结
单线程程序:适合IO异步,不能阻塞,不能有大量耗CPU的计算。典型如Nodejs,还有一些网络程序
多线程程序:适合CPU密集型程序
*多线程执行没有一个肯定的顺序,并非先启动的线程必定先执行,当前一刻谁抢占了CPU资源,谁就先执行。
*主线程只是负责启动一条线程,并不须要等待该县城运行结束,若是主线程调用的是run方法而不是start方法,那么就仅仅使普通调用,这样仅仅是单线程程序
*同一条线程不能启动屡次。
如何经过Runnable接口实现多线程
一、因为Runnable中没有start(),因此启动线程依然要调用Thread类中的start();多线程

相关文章
相关标签/搜索
本站公众号
   欢迎关注本站公众号,获取更多信息