<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>libevent</title>
	<atom:link href="https://www.aitaocui.cn/tag/261031/feed" rel="self" type="application/rss+xml" />
	<link>https://www.aitaocui.cn</link>
	<description>翡翠玉石爱好者聚集地</description>
	<lastBuildDate>Mon, 28 Nov 2022 11:53:36 +0000</lastBuildDate>
	<language>zh-CN</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.1.1</generator>

<image>
	<url>https://www.aitaocui.cn/wp-content/uploads/2022/11/taocui.png</url>
	<title>libevent</title>
	<link>https://www.aitaocui.cn</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>libevent(开源高性能网络库)</title>
		<link>https://www.aitaocui.cn/article/373239.html</link>
					<comments>https://www.aitaocui.cn/article/373239.html#respond</comments>
		
		<dc:creator><![CDATA[星群]]></dc:creator>
		<pubDate>Mon, 28 Nov 2022 11:53:36 +0000</pubDate>
				<category><![CDATA[知识]]></category>
		<category><![CDATA[libevent]]></category>
		<guid isPermaLink="false">https://www.aitaocui.cn/?p=373239</guid>

					<description><![CDATA[Libevent是一个用C语言编写的、轻量级的开源高性能网络库，主要有以下几个亮点：事件驱动（event-driven），高性能;轻量级，专注于网络，不如ACE那么臃肿庞大；源代码...]]></description>
										<content:encoded><![CDATA[</p>
<article>
<p>Libevent是一个用C语言编写的、轻量级的开源高性能网络库，主要有以下几个亮点：事件驱动（event-driven），高性能;轻量级，专注于网络，不如ACE那么臃肿庞大；源代码相当精炼、易读；跨平台，支持Windows、Linux、BSD和Mac Os；支持多种I/O多路复用技术，epoll、poll、dev/poll、select和kqueue等；支持I/O，定时器和信号等事件；注册事件优先级。Libevent已经被广泛的应用，作为底层的网络库；比如memcached、Vomit、Nylon、Netchat等等。</p>
</article>
<article>
<h1>简介</h1>
<p>libevent是一个事件触发的网络库 ，适用于windows、linux、bsd等多种平台，内部使用select、epoll、kqueue等系统调用管理事件机制。著名分布式缓存软件memcached也是基于libevent，而且libevent在使用上可以做到跨平台，而且根据libevent官方网站上公布的数据统计，似乎也有着非凡的性能。</p>
<h1>详情</h1>
<p>编译库代码，编译脚本会判断OS支持哪种类型的事件机制（select、epoll或kqueue），然后条件编译相应代码，供上层使用的接口仍然是保持统一的（否则也不能所谓的跨平台了）。在linux redhat as4u2上编译相当容易，configure以后make，make install就可以了，windows上编译似乎有点小麻烦，不过稍微改点东西也就通过了。</p>
<p>从代码中看，libevent支持用户使用三种类型的事件，分别是网络IO、定时器、信号三种，最新版本在定时器的实现上使用了最小堆的数据结构，以达到高效查找、排序、删除定时器的目的，IO和信号的实现均使用了双向队列（用链表实现）。网络IO上，主要关注了一下linux上的epoll（因为目前的开发主要在linux平台），结果发现libevent的epoll居然用的EPOLLLT，水平触发的方式用起来比较方便，不容易出错，但是在效率上可能比EPOLLET要低一些。</p>
<p>Libevent定时器的数据结构自version1.4起已由红黑树改为最小堆（Min Heap），以提高效率；网络IO和信号的数据结构采用了双向队列(TAILQ)。在实现上主要有3种链表:EVLIST_INSERTED,EVLIST_ACTIVE,EVLIST_TIMEOUT，一个ev在这3种链表之间被插入或删除，处于EVLIST_ACTIVE链表中的ev最后将会被调度执行。</p>
<p>Libevent提供了DNS，HTTP Server，RPC等组件，HTTP Server可以说是Libevent的经典应用。从http.c可看到Libevent的很多标准写法。写非阻塞式的HTTP Server很容易将socket处理与HTTP协议处理纠缠在一起，Libevent在这点上似乎也有值得推敲的地方。</p>
<h1>多线程</h1>
<p>libevent支持多线程编程，每个事件需要关联到自己的event_base。</p>
<h1>使用程序</h1>
<p>Chromium、Memcached、NTP、HTTPSQS等著名的开源程序都使用libevent库，足见libevent的稳定。更多使用libevent的程序可以到libevent的官网查看。</p>
<h1>主要组成</h1>
<p>libevent包括事件管理、缓存管理、DNS、HTTP、缓存事件几大部分。事件管理包括各种IO（socket）、定时器、信号等事件；缓存管理是指evbuffer功能；DNS是libevent提供的一个异步DNS查询功能；HTTP是libevent的一个轻量级http实现，包括服务器和客户端。libevent也支持ssl，这对于有安全需求的网络程序非常的重要，但是其支持不是很完善，比如http server的实现就不支持ssl。</p>
</article>
<div class="mt-3 mb-3" style="max-width: 770px;height: auto;">
                                    </div>
<div class="mt-3 mb-3" style="max-width: 770px;height: auto;">
                                    </div>
<div class="mt-3 mb-3" style="max-width: 770px;height: auto;">
                                    </div>
]]></content:encoded>
					
					<wfw:commentRss>https://www.aitaocui.cn/article/373239.html/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
