libev

File descriptor of getch()

送分小仙女□ 提交于 2021-02-10 06:26:17
问题 I want to use libev to listen for keyboard (keystrokes) events in the terminal. My idea is to use (n)curses getch() and set notimeout() (to be nonblocking) to tell getch() not to wait for next keypress. Is there a file descriptor that getch uses I can watch? 回答1: If you use initscr() , the file descriptor you ask for is fileno(stdin) , since the initscr subroutine is equivalent to: newterm(getenv("TERM"), stdout, stdin); return stdscr; If you use newterm(type, outfile, infile) , the file

并发模型与IO模型梳理

允我心安 提交于 2021-01-31 00:26:53
并发模型 常见的并发模型一般包括3类,基于线程与锁的内存共享模型,actor模型和CSP模型,其中尤以线程与锁的共享内存模型最为常见。由于go语言的兴起,CSP模型也越来越受关注。基于锁的共享内存模型与后两者的主要区别在于,到底是通过共享内存来通信,还是通过通信来实现访问共享内存。由于actor模型和CSP模型,本人并不是特别了解,我主要说说最基本的并发模型,基于线程与锁的内存共享模型。 为什么要并发,本质都是为了充分利用多核CPU资源,提高性能。但并发又不能乱,为了保证正确性,需要通过共享内存来协调并发,确保程序正确运转。无论是多进程并发,还是多线程并发,要么通过线程间互斥同步(spinlock,rwlock,mutex,condition,信号量),要么通过进程间通信(共享内存,管道,信号量,套接字),本质都是为了协同。多线程和多进程本质类似,尤其是linux环境下的pthread库,本质是用轻量级进程实现线程。下面以网络服务为例,简单讨论下多线程模型的演进。 最简单的模型是单进程单线程模型,来一个请求处理一个请求,这样效率很低,也无法充分利用系统资源。那么可以简单的引入多线程,其中抽出一个线程监听,每来一个请求就创建一个工作线程服务,多个请求多个线程,这就是多线程并发模型。这种模式下,资源利用率是上去了,但是却有很多浪费,线程数与请求数成正比,意味着频繁的创建/销毁线程开销

Centos7安装percona-xtrabackup2.4和8.0版本

流过昼夜 提交于 2020-12-21 07:28:26
Percona XtraBackup是一个基于MySQL的服务器的开源热备份实用程序 ,它不会在备份期间锁定您的数据库。 无论是24x7高负载服务器还是低事务量环境,Percona XtraBackup都旨在使备份成为一个无缝过程,而不会破坏生产环境中服务器的性能。 问题描述: 今天安装xtrabackup出现了问题,显示如下问题: Failing package is: percona-xtrabackup- 24 - 2.4 . 14 - 1 .el7.x86_64 GPG Keys are configured as: file : /// etc/pki/rpm-gpg/RPM-GPG-KEY-Percona [root@_mongodb_116 data]# cat hins7683145_data_20190508051605_qp.xb | xbstream -x - v -bash: xbstream: command not found 直接显示没有找到xbstream这个命令,因为xtrabackup没有安装成功的原因 解决方法: 1.从存储库安装Percona XtraBackup (推荐) 2.从Downloaded rpm 或 apt 软件包安装Percona XtraBackup 1.从Percona 存储库安装Percona XtraBackup

libev 源码浅析

血红的双手。 提交于 2020-11-18 04:56:23
libev是一个开源的事件驱动库,基于epoll,kqueue等OS提供的基础设施。其以高效出名,它可以将IO事件,定时器,和信号统一起来,统一放在事件处理这一套框架下处理。 libev的基本使用方法如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 int main (void) { // use the default event loop unless you have special needs struct ev_loop *loop = EV_DEFAULT; // initialise an io watcher, then start it // this one will watch for stdin to become readable ev_io_init (&stdin_watcher, stdin_cb, /*STDIN_FILENO*/0, EV_READ);// 设置对stdin_watcher这个fd关注读事件,并指定回调函数 ev_io_start (loop, &stdin_watcher);// 激活stdin_watcher这个fd,将其设置到loop中 // initialise a timer watcher, then start it // simple non

使用frp+ss访问内网机器服务

醉酒当歌 提交于 2020-05-03 16:06:49
1.在 使用frp进行内网穿透 的基础上,在内网机器的frpc.ini配置中添加 [web] type = tcp local_ip = master local_port = 内网端口 remote_port = 外网机器端口 启动 ./frpc -c frpc.ini 2.在内网机器上启动ss-server 修改配置/etc/shadow$ocks-libev/config.json,必须是0.0.0.0 { "server":"0.0.0.0", "server_port":内网端口, "local_port":1080, "password":"密码", "timeout":60, "method":"chacha20-ietf-poly1305" } 启动 ss-server -c /etc/shadow$ocks-libev/config.json 3.配置代理 这样就能访问内网机器上的服务了 来源: oschina 链接: https://my.oschina.net/u/4310671/blog/4263078

CentOS生产环境无网络安装percona-xtrabackup2.4【RPM安装教程】

时光怂恿深爱的人放手 提交于 2020-04-26 18:04:01
  Percona XtraBackup 8.0不支持对在MySQL 8.0之前的版本,Percona Server for MySQL或 Percona XtraDB Cluster中创建的数据库进行备份。由于MySQL 8.0在数据字典,重做日志和撤消日志中引入的更改与以前的版本不兼容,因此Percona XtraBackup 8.0 目前不可能也支持8.0之前的版本。   因为我准备备份生产环境的数据,但是生产环境不能连外网,所以只能先下载rpm包或者源码包进行安装,编译安装太慢了,所以就选择rpm包安装,安装的时候,可能也需要解决依赖的问题,缺什么就下载什么rpm包,这样最好。   授人以鱼不如授人以渔,以下是我的安装步骤,另外,结束时附上我是如何找到这些依赖rpm包。   因为生产环境是mysql5.6的,所以这里演示的是centos6安装percona-xtrabackup-24-2.4.4版本。   CentOS7的percona-xtrabackup2.4.12版本 wget https: // www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.4.12/binary/redhat/7/x86_64/percona-xtrabackup-24-2.4.12-1.el7.x86_64.rpm  

几种网络服务器模型的介绍与比较

五迷三道 提交于 2020-03-05 16:52:59
原文链接 前言 事件驱动为广大的程序员所熟悉,其最为人津津乐道的是在图形化界面编程中的应用;事实上,在网络编程中事件驱动也被广泛使用,并大规模部署在高连接数高吞吐量的服务器程序中,如 http 服务器程序、ftp 服务器程序等。相比于传统的网络编程方式,事件驱动能够极大的降低资源占用,增大服务接待能力,并提高网络传输效率。 关于本文提及的服务器模型,搜索网络可以查阅到很多的实现代码,所以,本文将不拘泥于源代码的陈列与分析,而侧重模型的介绍和比较。使用 libev 事件驱动库的服务器模型将给出实现代码。 本文涉及到线程 / 时间图例,只为表明线程在各个 IO 上确实存在阻塞时延,但并不保证时延比例的正确性和 IO 执行先后的正确性;另外,本文所提及到的接口也只是笔者熟悉的 Unix/Linux 接口,并未推荐 Windows 接口,读者可以自行查阅对应的 Windows 接口。 阻塞型的网络编程接口 几乎所有的程序员第一次接触到的网络编程都是从 listen()、send()、recv() 等接口开始的。使用这些接口可以很方便的构建服务器 / 客户机的模型。 我们假设希望建立一个简单的服务器程序,实现向单个客户机提供类似于“一问一答”的内容服务。 图 1. 简单的一问一答的服务器 / 客户机模型 我们注意到,大部分的 socket 接口都是阻塞型的。所谓阻塞型接口是指系统调用(一般是

libev 源码解析

Deadly 提交于 2020-01-17 06:03:03
一 libev简介   libev是一个轻量级的事件通知库,具备支持多种事件通知能力,通过对libev的源码的阅读,可以清楚了解事件通知实现内部机制。 二 核心数据结构 在libev中关键的数据结构是,loop结构体,该结构体定义的字段较多,但是主要核心的可以分为两大类 ev_loop结构体(loop为ev_loop结构的全局变量)的字段定义在ev_vars.h头文件中,然后在ev.c中通过include的方式导入 1.各类事件的watcher集合  loop中有支持很多类型的事件,如下 ev_io // IO可读可写 ev_stat // 文件属性变化 ev_signal // 信号处理 ev_timer // 相对定时器 ev_periodic // 绝对定时器 ev_child // 子进程状态变化 ev_fork // fork事件 ev_cleanup // event loop退出触发事件 ev_idle // event loop空闲触发事件 ev_embed // 嵌入另一个后台循环 ev_prepare // event loop之前事件 ev_check // event loop之后事件 ev_async // 线程间异步事件 这些事件的监控管理都对应一种类型的watcher数组,比如 (loop)->anfds :维护所有fd事件 (loop)-

what does readable/writable mean in a socket file descriptor? And why regular files don't bother with that?

℡╲_俬逩灬. 提交于 2020-01-10 04:31:09
问题 Since I'm new in learning libev recently, there's a readable/writable concept in a io_watcher that I don't quite understand. For my knowledge there's a parameter in linux system programming: O_ASYNC A signal (SIGIO by default) will be generated when the specified file becomes readable or writable. This flag is available only for terminals and sockets, not for regular files. So, since a regular file won't bother with readable/writable, what readable/writable really mean in socket programming?

Libev on Windows

我的未来我决定 提交于 2020-01-01 05:17:06
问题 Considering libevent vs. libev . Does the libev library have native support of IOCP on Windows? 回答1: both libev and libevent use select on windows to detect and dispatch events (the event core doesn't do I/O, only events). libevent in addition has a socket handle abstraction, which uses iocps on windows to do reads and writes. libev doesn't have anything comparable. the benchmarks seen so far indicate that the iocp backend of libevent is not very fast though, so if you are looking for fast on