网络编程之 Socket的模式(一) --- “阻塞/非阻塞” 与 “同步/异步”

1.  阻塞/非阻塞

        对于网络编程而言,Socket模式是开发者必须明确的一个问题。对于Socket的操作,可以分为阻塞模式和非阻塞模式两种。在两种不同模式下,同一个Socket函数的表现可能完全不同,所以必须引起开发者的注意。

        在解释阻塞(blocking)和非阻塞(non-blocking)之前,先看另外一对相对的词语,"同步"(synchronous)和"异步"(asynchronous)。同步和异步指的是两个模块间的消息交互方式。在程序中,模块之间的所有关系都是通过不同的函数去体现的。我们知道所有的函数都可以存在返回值,如果模块A调用模块B的f()函数时,得到的参数返回值能够代表业务上所需要的结果,则可以称此函数f()为同步函数,模块A和模块B就此消息流程的过程是同步的。否则则称为异步。
        上面的解释太过于绕口令了,举个简单的例子:
        模块A为应用界面,模块B为网络通讯模块,A通过B同远端的模块C进行实时通讯。模块B存在接口函数f(),函数f()能够保证网络通讯的数据完整性和正确性,并通过返回值bool量来表示成功失败(成功表示C端接收到完整的模块B所发送的数据,而失败则相反)。如果模块A调用模块B的f()函数的目的,只是为了把数据发送到C端,则在此情况下,我们可以把f()函数所代表的动作看作是一个同步动作。而如果模块A通过模块B的f()函数发送的数据具有某种实际意义,模块A期望的是得到所发送数据的真实响应结果,如A发送的数据是用来操作C促发某个动作,如操作一个数据库,或者前端的某个机械部件,A希望得到此动作的一个结果。则模块B提供的f()函数就不能被看作是一个同步的接口,因为f()函数的返回值只表示网络数据发送的成功与失败。如果A需要得到真实的操作结果,必须对B进行其他调用。A发送消息并得到其想要的对应结果的过程被分割成了两个部分,因此可以被看作是一个异步过程。

        抛开上面的同步和异步,跑的更远一些。我们都知道编程当中,在对现实世界的业务组织上,模块的思想是非常重要的,每一模块都只专注于自己需要实现的事情,彼此之间互不影响,模块之间通过有限的接口来实现互动。通过对模块的合理规划,可以使代码具有更好的组织性和维护性。
        同时我们也知道,在计算机所提供实现编程方式里,能够使用的技术只有函数调用ÿ
  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值