事件模型是不是是异步的
事件模型是否是异步的?
事件模型是否是异步的?
异步概念:调用某个函数,立即返回,这个线程其实在一个线程里运行。 而你的线程却继续往下执行。
异步函数也在运行。
windows事件: 有太多了,比如:点击按钮,也是事件,但是我们这里说的事件,是专指:网络中的io模型。
一个模型下有的函数式堵塞,有的则不是,这里以send,recv,accpet这几个函数来区分,是否异步:
EventSelect模型。其是否是异步的? 按照上面的概念来看,那些函数send, recv,accept等都不是立即返回的。
结论:非异步非堵塞模型。
异步选择模型(AsysnSelct)是否是异步?
字面意思,带有异步2字,必然是异步的?
没使用过,但是使用过CAsyncSocket类,很多函数却是立即返回。
select模型:
非异步非堵塞
重叠io
异步非堵塞
iocp
异步非堵塞
------解决方案--------------------
异步与模型有关,不可能用setsockopt来设置。
windows下的异步只有重叠io和iocp,linux下的aio也是异步,epoll这么高级的东西,也不是异步。
对于发送:异步就是把数据交给系统,系统发送完了之后通知你;
对于接收:异步就是把缓存交给系统,系统收到数据之后通知你;
其它的模型,都是查询式模式,即你向系统提问,某个套接可读可写了吗?系统告诉你可以,你才真正的send或者recv。
异步与阻塞与否也无关,但异步下往往将套接字设置为非阻塞(特别是你要在非异步模型上写一个异步模型,比如boost.asio),便于处理。
事件模型是否是异步的?
异步概念:调用某个函数,立即返回,这个线程其实在一个线程里运行。 而你的线程却继续往下执行。
异步函数也在运行。
windows事件: 有太多了,比如:点击按钮,也是事件,但是我们这里说的事件,是专指:网络中的io模型。
一个模型下有的函数式堵塞,有的则不是,这里以send,recv,accpet这几个函数来区分,是否异步:
EventSelect模型。其是否是异步的? 按照上面的概念来看,那些函数send, recv,accept等都不是立即返回的。
结论:非异步非堵塞模型。
异步选择模型(AsysnSelct)是否是异步?
字面意思,带有异步2字,必然是异步的?
没使用过,但是使用过CAsyncSocket类,很多函数却是立即返回。
select模型:
非异步非堵塞
重叠io
异步非堵塞
iocp
异步非堵塞
------解决方案--------------------
异步与模型有关,不可能用setsockopt来设置。
windows下的异步只有重叠io和iocp,linux下的aio也是异步,epoll这么高级的东西,也不是异步。
对于发送:异步就是把数据交给系统,系统发送完了之后通知你;
对于接收:异步就是把缓存交给系统,系统收到数据之后通知你;
其它的模型,都是查询式模式,即你向系统提问,某个套接可读可写了吗?系统告诉你可以,你才真正的send或者recv。
异步与阻塞与否也无关,但异步下往往将套接字设置为非阻塞(特别是你要在非异步模型上写一个异步模型,比如boost.asio),便于处理。