自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(6)
  • 资源 (2)
  • 收藏
  • 关注

原创 EAGAIN不是非阻塞才有

在非阻塞模式下,write或read返回-1,errno为EAGAIN,表示相应的操作还没执行完成。在阻塞模式下,设置SO_RCVTIMEO和SO_SNDTIMEO会导致read/write函数返回EAGAIN。O_NODELAY会导致write接口返回EAGAIN,的确,如果设置了O_NODELAY而当前不可写,那么write接口会设置errno为EAGAIN,但是write接口会返回0而不是-...

2018-03-05 23:05:13 2292

原创 条件变量和任务队列

条件变量是一个或多个线程等待某个布尔表达式为真,即等待别的线程“唤醒”它。条件变量的学名叫做管程。条件变量对于wait端:1.必须与mutex一起使用,该布尔表达式的读写需要受到mutex的保护。2.在mutex已上锁的时候才能调用wait()3.把判断布尔条件和wait()放在while循环中。int Queue::getFront(){ Lock l(&(this->mut...

2018-03-05 22:20:40 540 1

原创 线程池封装成类的选择

1.由于线程pthread_create中的回调函数是void*(*fun)(void*)的形式。而封装在类中的线程的运行函数是void *ThreadWorker()的形式,因此声明一个类型别名typedef void*(*Thread)(void *)。在调用pthread_create时,进行强制类型转化,并把类的this指针传递给ThreadWorker函数。if(pthread_crea...

2018-01-27 11:02:33 199

原创 非阻塞读写图片出错

问题描述:服务器端采用非阻塞I/O+epoll的模式,客户端发送的图片未能成功接收。原因:采用EPOLL的边缘触发模式,因此当套接字可读时,只会触发一次,应用层设置的每次读缓冲区为1024,小于内核中的套接字接收缓冲区,因此每次读图片时有大部分数据留在内核缓冲区中未读出。因此,在应用层读套接字时,应该循环读取socket,直到errno==EWOULDBLOCK。然而,在进行了上述更改之后

2018-01-26 22:20:40 165

原创 线程池出现段错误

经过排查发现相同的连接套接字会被处理多次,在发送完图片后会删除相应图片,因此最终导致段错误。不使用线程池发现请求队列的加锁没有问题,因此问题定位到线程池部分。最终发现是线程池中加速力度不够,在往线程池中添加任务时,一部分代码没有在锁内,导致出错。另一个错误是传递给线程池中工作线程的参数是局部变量的指针,当传递给工作线程时他没有能够立即执行,有其他线程抢占,因此该内存地址中的值已经变化了,获

2018-01-26 15:29:42 1115

原创 进程池出现卡死现象

问题描述:客户端发起请求后,服务器端一直处于阻塞状态。通过ps命令获取到各个进程的进程号attach 父进程id查看bt堆栈attach 子进程id查看bt堆栈发现父进程和子进程都阻塞在epoll_wait,子进程复制了父进程的进程空间包括epollfd,因此应该在每个子进程中初始化自己的epollfd

2018-01-26 15:21:29 3095

虚拟视点合成视频

三星,虚拟视点,360度,全景,静态,动态,光流,虚拟现实

2018-01-08

360度虚拟视点视频

360虚拟视点视频,三星,全景,光流,会议室,虚拟现实

2018-01-04

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除