`
daojin
  • 浏览: 677143 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

socket的拉屎模型

 
阅读更多

 太空中有很多宇航员,要大便。

第一种方案:

    一个一个排队大便。一天大便一次,轮到谁,谁必须大便完成之后,才能给第二个人大便。【大便管理者很方便】,但是如果前面的【大便者】一直大便不出,直接把后面的【大便者给憋死】。正所谓【占着茅坑不拉屎】。

   这就是阻塞同步模型。

第二种方案:

    为了防止【占着茅坑不拉屎】, 不排队大便了,拿着便桶按照顺序一个一个轮询,告诉他做好准备,没准备好的,就直接放弃,并轮询下一个。有大便的就马上开始。

这就是【大便者】来说,是一步完成大便。但是不阻塞【大便管理员】。大便管理员一直很忙碌,叫做【同步非阻塞】。

   厕所终于能容纳更多的【大便者】了。

这就是【同步非阻塞】模型

第三种方案

     大便管理者太累啦,就出了个更歪的注意。买了个大喇叭。也不排队了,觉得这种方法在这里不合适。便池没有人的时候,就直接拿大喇叭一吼,有要大便的告诉我!!!!!

     这下【大便管理者】就没有那么忙碌,有时候还可以歇一会。(wait函数)。守着厕所等就是拉。就相当于把【大便管理者给阻塞】了。也不忙了。

  但是对于【大便者】来说又多了一份工作,那就是有大便还必须给【大便管理者】通知,然后获得准许,才可以大便。

这就是【阻塞非同步模型】。

第四种方案:

   尽管如此,大便管理者还是觉得太累了。每天还必须拿着大喇叭来吼,还必须蹲在厕所旁边闻臭味。并且【大便管理者】觉得跟【大便者】之间的交互简直是累透了。能不能直接让【大便者】想大便就大便。自己也不用整天忙了。于是给【大便者】每一个人发了一个大便袋子。【大便者】每天的工作更简单了,就是直接大便到袋子里。并且由机器人去搜集袋子。

  对于【大便者】来说,第一步,搞到一个袋子。第二步,拉屎。两步。叫做异步。

  对于【大便管理者】来说,也不用守着厕所wait啦,该忙别的忙别的。叫做非阻塞,非同步。

 

可以看出对于应用程序【大便管理者】来说,第四种方案明显优越于前三种,下面就给出了一个简单的例子:

 

 

//============================================================================
// Name        : StudyNetWorkLinux.cpp
// Author      : 
// Version     :
// Copyright   : Your copyright notice
// Description : Hello World in C++, Ansi-style
//============================================================================

#include <iostream>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include<aio.h>
using namespace std;
#define BUFSIZE 1023
#define EINPROGRESS 1
int main() {
	  int fd, ret;
	  struct aiocb my_aiocb;
	  fd = open( "file.txt", O_RDONLY );
	  if (fd < 0) perror("open");
	  /* Zero out the aiocb structure (recommended) */
	  memset( (void *)&my_aiocb, 0, sizeof(my_aiocb));

	  /* Allocate a data buffer for the aiocb request */
	  my_aiocb.aio_buf = malloc(BUFSIZE+1);
	  if (!my_aiocb.aio_buf) perror("malloc");
	  /* Initialize the necessary fields in the aiocb */
	  my_aiocb.aio_fildes = fd;
	  my_aiocb.aio_nbytes = BUFSIZE;
	  my_aiocb.aio_offset = 0;
	  ret = aio_read( &my_aiocb );
	  if (ret < 0) perror("aio_read");
	  while ( aio_error( &my_aiocb ) == EINPROGRESS );

	  if ((ret = aio_return( &my_aiocb )) > 0) {
	    /* got ret bytes on the read */
	  } else {
	    /* read failed, consult errno */
	  }
	  cout << "!!!Hello World!!!" <<(char*)(my_aiocb.aio_buf) <<endl; // prints !!!Hello World!!!
	  return 0;
}
3
3
分享到:
评论

相关推荐

    冒险岛群聊机器人 蠢猫(无视计算 星之力计算 世界组队表 占卜 怪物查询).zip

    无人机最强算法源码,易于部署和学习交流使用

    node-v8.14.1-linux-x64.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    HostelDataset(been personally processed)

    此数据集主要是一个跟酒店类型有关的数据集,源于kaggle网站上的Guatemalas_Travel数据集,因设计所需,本人对原来的数据集进行了必要的修改。

    3D相册.zip

    3D相册.zip

    中国统计NJ面板数据-(更新至2022年)平均每天能源消费量.xls

    数据来源:中国统计NJ-2023版

    3dmax空对象清除器下载

    3dmax空对象清除器,在场景中找到空对象,向你显示这些对象的列表,并允许你从场景中删除它们。

    node-v10.13.0-linux-s390x.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    中国统计NJ面板数据-(更新至2022年)入境外国游客分组构成.xls

    数据来源:中国统计NJ-2023版

    数据要素资产化与数据资产入表路线框架总体规划方案.pptx

    数据要素资产化与数据资产入表路线框架总体规划方案.pptx

    用户手册 8100C/8200C/8300C系列无功补偿装置

    施耐德电气 8100C 8200C 8300C 用户手册

    毫无特色的 QQ 机器人.zip

    无人机最强算法源码,易于部署和学习交流使用

    员工培训方案gl.ppt

    员工培训方案gl.ppt

    infrared-remote-controller-master

    旅行商问题

    小米扫地机器人工程源码程序STM32103 freeRTOS设计源代码.zip

    小米扫地机器人工程源码程序STM32103 freeRTOS设计源代码,某米早起的扫地机器人的源码,使用的是STM32开发,freeRTOS系统,包含完整的工程源码,可以做为你的学习设计参考。 HARDWARE文件夹 硬件初始化源文件 application_Robot 机器人行为相关的文件 application_Share 机器人共享相关的文件(一般为算法) application_Motor 机器人电机应用相关文件 application_Key 机器人按键应用相关文件 application_Led 机器人LED应用相关文件 application_Led 机器人adc获取与处理应用相关文件 application_PowerChip 机器人电池管理芯片与充电应用相关文件 application_Bmi160 机器人BMI160 陀螺仪芯片 应用相关文件 application_Drop 机器人掉落传感器应用相关文件 application_UltraSonic 机器人超声波传感器应用相关文件 appl

    39黎秋菊.ipynb

    39黎秋菊.ipynb

    node-v11.14.0-linux-armv7l.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    域名注册查询的微信小程序页面源码

    模板描述:域名注册查询 微信小程序。域名注册查询的微信小程序页面源码是使用微信WEB开发者工具开发,亲测可直接运行。该程序从设计上满足了相关应用服务的设计要求,是一款非常值得学习简介的DEMO小程序源码。

    水下机器人无线充电上位机.zip

    无人机最强算法源码,易于部署和学习交流使用

    DCS 400系列可控硅直流传动系统手册

    DCS 400 手册

    node-v11.15.0-linux-armv6l.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

Global site tag (gtag.js) - Google Analytics