linux    发布于 2019-07-31   309人围观   0条评论

epoll_create

  1. #include <sys/epoll.h>
  2. int epoll_create(int size);

epoll_create()创建一个新的epoll对象,并返回一个文件描述符指向该epoll对象。
size表示,该epoll对象可能要监听的文件描述符数量,内核会使用该建议值分配内部的数据结构,当然之后如果空间不够用,内核会分配更多的空间。
linux2.6.8之后,size参数被忽略(但是仍然必须大于0)。
参考epoll_create - Linux manual page - man7.org

epoll_ctl

  1. #include <sys/epoll.h>
  2. int epoll_ctl(int epfd, int op, int fd, struct epoll_event *event);

epfd即epoll_create返回的描述符,用于管理用户关心的文件描述符。epoll_ctl用于添加、修改、删除epoll对象中的fd及该fd关联的事件监听。

op的值:

  • EPOLL_CTL_ADD
  • EPOLL_CTL_MOD
  • EPOLL_CTL_DEL

event的定义

  1. typedef union epoll_data {
  2. void *ptr;
  3. int fd;
  4. uint32_t u32;
  5. uint64_t u64;
  6. } epoll_data_t;
  7. struct epoll_event {
  8. uint32_t events; // Epoll Events
  9. epoll_data_t data; // User Data Variable
  10. }

成员events的值

  • EPOLLIN 可读
  • EPOLLOUT 可写
  • EPOLLET 设置边缘触发。默认水平触发
  • ...其他

参考epoll_ctl - Linux manual page - man7.org

epoll_wait

  1. #include <sys/epoll.h>
  2. int epoll_wait(int epfd, struct epoll_event *events, int maxevents, i
查看更多
linux vscode xelatex    发布于 2019-05-09   310人围观   0条评论

pre

  • 安装tex live并配置全局环境变量
  • 安装vscode

禁用fcitx的虚拟键盘

title

fcitx的虚拟键盘会占用编辑快捷键ctrl+alt+b

vscode 安装

安装插件Latex Workshop

title

magic comment

行首加上

  1. % !TEX program = xelatex

指定xelatex编译

这是使用xelatex > bibtex > xelatex > xelatex过程编译。如果不加则默认使用pdflatex。

官方文档中不建议这么做,兼容性成疑,这里使用下面介绍的方式

配置xelatex工具链

打开setting.json,加入

  1. "latex-workshop.latex.tools": [
  2. {
  3. "name": "latexmk",
  4. "command": "latexmk",
  5. "args": [
  6. "-synctex=1",
  7. "-interaction=nonstopmode",
  8. "-file-line-error",
  9. "-pdf",
  10. "%DOC%"
  11. ]
  12. },
  13. {
  14. "name": "xelatex",
  15. "command": "xelatex",
  16. "args": [
  17. "-synctex=1",
  18. "-interaction=nonstopmode",
  19. "-file-line-error",
  20. "%DOC%"
  21. ]
  22. },
  23. {
  24. "name": "pdflatex",
  25. "command": "pdflatex
查看更多
linux    发布于 2019-04-02   483人围观   0条评论

安装aria2

  1. sudo add-apt-repository ppa:t-tujikawa/ppa
  2. sudo apt-get update
  3. sudo apt-get install aria2

安装tampermonkey扩展

chrome插件地址 tampermonkey

安装 EX-百度云盘

安装 EX-百度云盘
油猴脚本地址 EX-百度云盘

title

可看到EX 下载字样,在该选项上选择复制压缩链接得到一个下载链接。

aria2c直接下载

aria2c 后面跟上下载链接即可

  1. aria2c "download.url"
查看更多
linux latex xelatex    发布于 2019-03-27   84人围观   0条评论

pre

目的: 在ubuntu搭建基于xelatex的论文编写环境
手段:

  1. 通过安装tex live 安装xelatex

tex live 安装

clean

如果上一次安装失败,则清理上一次遗留的安装文件

  1. rm -rf /usr/local/texlive/2018
  2. rm -rf ~/.texlive2018

下载iso

打开 http://tug.org/texlive/acquire-iso.html,点击download from a nearby CTAN mirror,下载iso文件

挂载镜像并安装

  1. sudo mount texlive2018-20180414.iso /mnt/
  2. cd /mnt/
  3. sudo ./install-tl

config

修改 /etc/profile,更改环境变量PATH

  1. export PATH=/usr/local/texlive/2018/bin/x86_64-linux:$PATH
  2. export MANPATH=/usr/local/texlive/2018/texmf-dist/doc/man:$MANPATH
  3. export INFOPATH=/usr/local/texlive/2018/texmf-dist/doc/info:$INFOPATH

texmaker 安装

  1. sudo apt install texmaker

或者使用TexWorks

  1. sudo apt install texworks

测试

  1. \documentclass{article}
  2. \begin{document}
  3. sdfasfdasd
  4. \end{document}

中文支持

  1. \documentclass[UTF8]{ctexart}
  2. \begin{document}
  3. 你好,world撒旦啊!
  4. \end{document}
查看更多
linux 服务端 多线程 c++    发布于 2018-12-30   527人围观   0条评论

前言

最近在读陈硕的moduo网络库的书,记录总结一些东西。

本章内容主要介绍muduo网络库的简单使用和muduo多线程模型,以及比较muduo网络库和其他一些网络库的性能。muduo网络库的使用在此不赘述,和大部分网络库使用差不多。本章内容中让我收获比较大的是,6.6节在详解muduo多线程模型时,比较了常见的并发网络服务程序设计方案。读完这章的我有一个巨大的疑问,就是到底应该如何有效的提高并发连接数?这个问题暂时还没想的太明白

常见的并发网络服务程序设计方案

陈硕在附录A中举了三大TCP网络编程案例:echo服务器、chat聊天/聊天室以及proxy代理服务器。

方案0 单线程 accpet + read/write 最最基本的模型 

方案1 accept + fork 即每个连接均以一个进程来处理 process-per-connection

方案2 accpet + thread 即每个连接均以一个线程来处理 thread-per-connection

方案3 pre  fork 

方案4 pre threaded

方案5 单线程reactor 即单线程poll然后read/write

方案6 (过渡方案)单线程reactor + thread-per-task 依旧是单线程poll,不同的是,每个请求(不是每个链接)创建一个线程

方案7 (过渡方案)单线程reactor + work thread 依旧是单线程poll,不同的是,每个连接创建一个线程,相同链接上的请求由同一个计算线程处理,以此保证同一个连接上请求结果的顺序性,而方案6无法保证这一点。该方案的问题在于,可能还不如直接用方案2了呢。因为该方案并发连接数限制于线程数目。

方案8 单线程reactor + thread-pool 基于方案6,构造线程池,Reactor线程处理IO,计算任务交个线程。每个请求分发给计算线程池处理。该方案的每个连接上的一长串请求有乱序返回的可能,所以需要依靠id来梳理响应

方案9 reactor in threads,即one loop per thread,一个main Reactor 负责accept(2)连接,然后将连接分发到其他线程的sub Reactor上。

方案10 reactor in process,nginx内置方案。和方案9大同小异

方案11 多reactors + threa

查看更多