进程是程序的一次执行,是系统资源(CPU时间、内存)分配的基本单位。
线程是进程的一个执行流,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位,一个进程可以有多个线程,多个线程可以并发执行,线程与同属一个进程的其他线程共享进程所拥有的全部资源。
与进程比较
线程的优点:
启动一个线程比启动一个进程节省资源,同一进程下的线程共享数据空间,方便通信。
线程的缺点:
一个线程要是死掉了,整个进程就死掉了,一个进程死掉了不会影响其他进程,所以多进程比多线程健壮。
不与进程比较
线程的优点:
1、提高应用程序响应。当一个操作耗时很长时,整个系统都会等待这个操作,此时不会响应键盘、鼠标等操作,而使用多线程技术,将耗时长的操作置于一个新的线程,可以避免这种情况。
2、使多CPU系统更加有效。操作系统会保证当线程数不大于CPU数目时,不同的线程运行于不同的CPU上。
3、改善程序结构。一个既长又复杂的进程可以考虑分为多个线程,成为几个独立的运行部分,这样的程序会利于理解和修改。
注:CPU时间即反映CPU全速工作时完成该进程所花费的时间。
关于同步与异步
同步就是在发出一个“调用时”,在没有得到结果之前,该“调用”就不返回,如果结果返回时间很长,就出现阻塞状态。换句话说,就是由“调用者”主动等待这个“调用”结果。
异步则是在“调用发出后”,这个调用就直接返回了,没有返回结果,“被调用者”来通知“调用者”返回的结果。
举个通俗的例子:
你打电话问书店老板有没有《分布式系统》这本书,如果是同步通信机制,书店老板会说,你稍等,”我查一下”,然后开始查啊查,等查好了(可能是5秒,也可能是一天)告诉你结果(返回结果)。
而异步通信机制,书店老板直接告诉你我查一下啊,查好了打电话给你,然后直接挂电话了(不返回结果)。然后查好了,他会主动打电话给你。在这里老板通过“回电”这种方式来回调。
而阻塞与非阻塞阻塞和非阻塞关注的是程序在等待调用结果(消息,返回值)时的状态.
1. 阻塞非阻塞表示下面 买书过程中 可能出现的状态,是从 我 这个单角色角度来看待这个买书这个问题。
2. 同步异步表示一种协作方式,是从全局更高的角度 “进程之间 合作的方式” 来看待买书这个业务。两个进程之间如果商量采用异步方式处理买书这一业务,就不存在阻塞这种状态。
异步和多线程两者都可以达到避免调用线程阻塞的目的,从而提高软件的可响应性。