- 博客(22)
- 资源 (3)
- 收藏
- 关注
原创 Golang 学习,第一篇:环境配置
Golang 学习,第一篇:环境配置欢迎来到Go的世界,让我们开始探索吧! Go是一种新的语言,一种并发的、带垃圾回收的、快速编译的语言。它具有以下特点:它可以在一台计算机上用几秒钟的时间编译一个大型的Go程序。 Go为软件构造提供了一种模型,它使依赖分析更加容易,且避免了大部分C风格 include文件与库的开头。它可以在一台计算机上用几秒钟的时间编译一个大型的Go程序。 Go为软件构造
2016-01-30 18:10:35 813
原创 Linux Socket编程注意事项
Socket API 是网络应用程序开发中实际应用的标准 API。尽管该 API 简单,但是开发新手可能会经历一些常见的问题。本文识别一些最常见的隐患并向您显示如何避免它们。
2015-07-06 17:34:55 1281
原创 高性能定时器时间轮的实现
关于定时器有很多种,有基于升序的定时器时间链表,但是这种链表存在效率的不足,就是当插入定时器的时候时间复杂度是O(n).今天,我们来认识一下高性能定时器时间轮。
2014-07-03 23:04:27 6165 1
原创 基于线程池模型的讨论与完整代码演示
线程池引入的必要性:在网络服务器中,包括大量的web服务器,它们都需要在单位时间内必须处理相当数目的接入请求以及数据处理。通常在传统多线程服务器中是这样实现的:一旦有个请求到达,就创建一个线程,由该线程执行任务,任务执行完毕后,线程就退出。这也就是通常所说的及时创建,及时销毁策略。
2014-06-26 14:59:38 947 1
原创 为什么很多编程语言数组的下标从0开始
什么是数组数组(Array)是一种线性表数据结构。它用一组连续的内存空间,来存储一组具有相同类型的数据。他的关键词里有三个:线性表连续的内存空间相同的数据类型线性表:表示数据是一种线性的排列方式连续的内存空间,方便数据的随机访问,相同的数据类型保证了在连续的内存空间内的数据格式相同。数组在内存中的寻址公式:a[i]=baseAddress+i*arrTypeSizebaseAddress表示数组的起始地址,即a的内存地址arrTypeSize 表示数组中每个元素的大小。优点高
2020-09-14 11:21:15 516
原创 Golang Context的常规操作
Golang Context的常规操作contextcontext是go的并发编程的常用模式,可以通过context来处理超时,取消任务等一系列操作用context 取消任务示例func main() { parentCtx, cancel := context.WithCancel(context.Background()) for i := 0; i < 10; i++ {//启动10个goroutine childCtx, _ := context.WithCancel(pa
2020-08-11 14:11:58 192
转载 TCP协议疑难杂症全景解析
说明:1).本文以TCP的发展历程解析容易引起混淆,误会的方方面面2).本文不会贴大量的源码,大多数是以文字形式描述,我相信文字看起来是要比代码更轻松的3).针对对象:对TCP已经有了全面了解的人。因为本文不会解析TCP头里面的每一个字段或者3次握手的细节,也不会解释慢启动和快速重传的定义4).除了《TCP/IP详解》(卷一,卷二)以及《Unix网络编程》以及Linux源代码之外,
2015-08-06 11:27:31 771
转载 服务器-TCP 在 EPOLL 模型中的注意细节
前段时间在公司开发了基于udp的流媒体转发服务器,在公网udp转发ts,花屏比较严重。课下之余写了epoll-tcp模型的转发服务器作为测试,比较一下效果,其间遇到不少问题,在此做个笔记。代码最后附上一、业务需求:终端录制视频(android编码h264) 客户端请求视频 服务器负责转发因为是测试用没有考虑配置文件,负载均衡,安全认证等二、协议指定1、音
2015-08-06 10:04:13 1416
转载 epoll精髓
分类: linux 网络2013-02-28 15:11 290人阅读 评论(0) 收藏 举报目录(?)[+]http://www.cnblogs.com/OnlyXP/archive/2007/08/10/851222.htmlepoll精髓在linux的网络编程中,很长的时间都在使用select来做事件触发。在linux新的内核中,有了一种替
2015-08-06 09:43:40 498
原创 Linux Socket API Connect 函数详解
在讲解套接字编程函数之前,有必要对socket编程的两个不可或缺的结构体进行说明。第一个结构体式struct sockaddr.。这个结构为许多类型的套接字储存套接字地址信息: Sockaddr结构体介绍1. #include 2. 3. struct sockaddr { 4. uint8_t sa_len; 5. unsigned shor
2015-07-06 18:04:21 920
原创 Linux Sendfile 的优势
Sendfile 函数在两个文件描述符之间直接传递数据(完全在内核中操作,传送),从而避免了内核缓冲区数据和用户缓冲区数据之间的拷贝,操作效率很高,被称之为零拷贝。Sendfile 函数的定义如下:#include<sys/sendfile.h>ssize_t sendfile(int out_fd,int in_fd,off_t*offset,size_t count);
2015-07-06 17:50:26 1196
原创 Linux下C与Mysql的混合编程
本文详细介绍了linux 下mysq的安装,使用,以及如何打开mysql引擎。并给出示例代码演示C语言与mysql的使用关系
2014-09-30 12:41:42 1959
原创 升序定时器的时间链表的完全实现
本文详细阐述了定时器的原理,使用方法,以及示例代码,定时器通常包含至少两个成员:一个超时时间(通常采用相对时间或者超时时间)和一个超时时间到达后的一个回调函数。
2014-07-02 19:06:46 2894 1
原创 C/C++位的移位操作
左移与右移1.左移运算符()是双目运算符,其功能是把"运算符左边的运算数的各二进位全部左移若干位,移动的位数由"运算符右边的数指定,高位丢弃,低位补0。 例如:Int a = 0x1234;Unsigned char* p =(unsigned char*)&a;a = *(p)此时a的最左端一个字节移动8位,a=0x3400;
2014-06-20 18:17:41 2487
原创 C/C++ &与&& |与|| 的区别
&&表示逻辑与的意思,即为and。当运算符两边的表达式的结果都为true时,整个运算结果才为true,否则,只要有一方为false,则结果为false。比如 12&&23的结果就是1,12&&-1 的结果是1,123&&0的结果就是0 &&还具有短路的功能,即如果第一个表达式为false,则不再计算第二个表达式,例如,对于if(str != null && !str.equals(
2014-06-20 18:16:02 5189
原创 C++ STL之map的使用方法
map解释map(映射)——经过排序了的二元组的集合,map中的每个元素都是由两个值组成,其中的key(键值,一个map中的键值必须是唯一的)是在排序或搜索时使用,它的值可以在容器中重新获取;而另一个值是该元素关联的数值。比如,除了可以ar[43] ="overripe"这样找到一个数据,map还可以通过ar["banana"] ="overripe"这样的方法找到一个数据。如果你想获得其中的
2014-06-19 12:53:16 786
原创 C++ STL容器适用情况的说明
各种容器的特性vector典型的序列容器,C++标准严格要求次容器的实现内存必须是连续的,唯一可以和标准C兼容的stl容器,任意元素的读取、修改具有常数时间复杂度,在序列尾部进行插入、删除是常数时间复杂度,但在序列的头部插入、删除的时间复杂度是O(n),可以在任何位置插入新元素,有随机访问功能,插入删除操作需要考虑。deque序列容器
2014-06-19 12:51:44 839
原创 C/C++ 宏中“#"和"##”的常见用法
一般用法通常情况我们一般把宏#参数变为一个字符串,形如:123--->”123”,当然这种转换方法很多譬如:itoa,sprintf等函数都可以完成,但是如果频繁的调用这些系统调用的话,会造成较大的系统开销,使用宏#不失为一种高效便捷的手段,用##把两个宏参数贴合在一起.简单的方法。
2014-06-19 12:47:43 768
原创 C++构造函数为什么不能是虚函数
原因1:从存储空间角度 这里你需要知道一个概念,那就是虚函数表vtbl,每一个拥有虚成员函数的类都有一个指向虚函数表的指针。对象通过虚函数表里存储的虚函数地址来调用虚函数。 那虚函数表指针是什么时候初始化的呢?当然是构造函数。当我们通过new来创建一个对象的时候,第一步是申请需要的内存,第二步就是调用构造函数。试想,如果构造函数是虚函数,那必然需要通过vtbl来找到虚构造函数的入口
2014-06-19 12:42:56 1397
原创 Linux input 子系统详解与代码示例
由于linux 的驱动模型增加了input层,导致几乎所有的底层驱动都把数据封装在event里上报给input子系统。由此看来,这种改变让kernel 更具有模块化,各个模块的耦合度更低了。下面我们一起来研究input 层^_^1. 从用户层的角度看input(event 事件)了解linux的人一定会对/dev,/ sys, /proc这几个目录有所印象,这是从内核导出到用
2014-01-09 21:33:24 2367
http协议的下载程序源码
2013-12-27
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人