124. 学会从线程模型和IO模型剖析应用程序
线程模型、IO模型直接决定应用程序的运行状态,熟知一个应用程序的两个模型就具备了对其时时刻刻运行状态的观测能力。
关于线程模型的同步、异步、阻塞、非阻塞——主体对象:函数调用线程,作用对象:一个函数或一段程序执行逻辑
-
线程同步调用:调用目标是一个函数,调用动作的发起者是调用线程,被调函数的执行者也是调用线程
-
线程异步调用:调用目标是一个函数,调用动作的发起者是调用线程,被调函数的执行者是其他线程
-
线程阻塞调用:调用目标是一个函数,调用动作的发起者是调用线程,被调函数的执行者是当前调用线程或其他线程,当前调用线程等待被调函数执行结束;调用线程负责发起,即时要求结果
-
线程非阻塞调用:调用目标是一个函数,调用动作的发起者是调用线程,被调函数的执行者是其他线程,当前调用线程不等待被调函数执行结束,调用动作发出后立即结束,不等待结果;调用线程只管发起,不即时要求结果
阻塞、非阻塞强调的是调用线程是否等待获得函数执行结果,等待结果即为阻塞,不等待即为非阻塞,阻塞可以是同步调用,也可以是异步调用的,非阻塞一定是异步调用的,即由其他线程完成函数执行。
关于IO模型的同步、异步、阻塞、非阻塞——主体对象:发送请求时使用的socket连接
-
同步IO:一请求一响应式IO,如HTTP、JDBC等几乎所有网络协议都是同步IO模型,即客户端请求、服务端回应的一请求一响应式请求模型。
-
异步IO:同异步调用,被调函数是一段IO请求逻辑
-
阻塞IO:一请求一响应独占连接式IO,请求发出后直到对端返回响应才算完成一个IO过程,连接才会得释放,此期间连接被独占,直到一请求一响应IO过程完成
-
非阻塞IO:同非阻塞调用,被调函数是一段IO请求逻辑
125. 学会从线程模型和IO模型去设计实现你的程序
一个良好的程序一定有一组清晰且高效的线程模型和IO模型。
一个应用程序应当首先是线程模型和IO模型,再次是设计模式、领域驱动、内聚解耦合。