Jenkins - 持续集成环境搭建
摘要:1. Jenkins 概述 Jenkins是一个开源的持续集成工具。持续集成主要功能是进行自动化的构建。自动化构建包括自动编译、发布和测试,从而尽快地发现集成错误,让团队能够更快的开发内聚的软件。 2. Jenkins功能 主要功能: l 代码库(svn/git等)代码发生变化后更新代码至jenki
阅读全文
Samba - 文件共享服务器的搭建和配置
摘要:下载与安装: deb包安装 官方deb包下载:http://packages.ubuntu.com/ 命令安装dpkg –i xxxx.deb (安装不成功留意日志安装依赖包) apt安装 apt-get install samba 测试是否安装成功: 直接目录访问Linux ip:\\192.16
阅读全文
架构设计 - 日志管理接口设计
摘要:在后端代码中,日志无处不在,设计一套自己的日志管理代码,给框架提供一套好用的日志接口将大大方便代码的开发。 其中在日志管理代码的编写中,主要有以下难点: 1.数目不确定的入参函数编写 2.日志权限控制 3.日志输出形式。 接口设计: 1.提供三类日志打印形式:1)控制台打印信息,类似printf的接
阅读全文
ZeroMQ - 三种模型的python实现
摘要:ZeroMQ是一个消息队列网络库,实现网络常用技术封装。在C/S中实现了三种模式,这段时间用python简单实现了一下,感觉python虽然灵活。但是数据处理不如C++自由灵活。 1.Request-Reply模式: 客户端在请求后,服务端必须回响应 server: client: 2.Publis
阅读全文
ACE - Reactor实现I/O,Dispatch,Service三层完整服务器(完结)
摘要:框架描述 服务器层次: I/O层:对应具体的文件描述符处理,对应ACE中的handle。 Dispatch层:事件分发,将I/O事件分发到对应绑定的处理队列等待业务处理,对应ACE中的Event_handle。 业务层:处理具体业务,包含一组线程或进程,并发处理业务。对应ACE中的ACE_Task。
阅读全文
ACE - Reactor源码总结整理
摘要:ACE源码约10万行,是c++中非常大的一个网络编程代码库,包含了网络编程的边边角角。 ACE代码可以分三个层次:OS层、OO层和框架层: OS层主要是为了兼容各个平台,将网络底层API统一化,这一层用户不关心。 OO层则是对一些常用的数据结构或方法进行OO封装,方便上层使用,包括socket方法,
阅读全文
ACE - ACE_Task源码剖析及线程池实现
摘要:原文出自http://www.cnblogs.com/binchen-china,禁止转载。 上篇提到用Reactor模式,利用I/O复用,获得Socket数据并且实现I/O层单线程并发,和dispatch层把不同的I/O绑定到了不同的Event中去处理。也就是已经实现了多个client连接和通信,
阅读全文
ACE - Reactor模式源码剖析及具体实现(大量源码慎入)
摘要:原文出自http://www.cnblogs.com/binchen-china,禁止转载。 在之前的文章中提到过Reactor模式和Preactor模式,现在利用ACE的Reactor来实现一个基于Reactor框架的服务器。 首先回顾下Reactor模式和Preactor模式。 Reactor模
阅读全文
ACE - 代码层次及Socket封装
摘要:原文出自http://www.cnblogs.com/binchen-china,禁止转载。 ACE源码约10万行,是c++中非常大的一个网络编程代码库,包含了网络编程的边边角角。在实际使用时,并不是所有代码都能用到你的项目中来,相反你只需要其中的一小部分就已经可以完成实际所需。 最近研究其源码最大
阅读全文
IO复用(Reactor模式和Preactor模式)——用epoll来提高服务器并发能力
摘要:上篇线程/进程并发服务器中提到,提高服务器性能在IO层需要关注两个地方,一个是文件描述符处理,一个是线程调度。 IO复用是什么?IO即Input/Output,在网络编程中,文件描述符就是一种IO操作。 为什么要IO复用? 1.网络编程中非常多函数是阻塞的,如connect,利用IO复用可以以非阻塞
阅读全文
服务器线程并发和进程并发
摘要:进程和线程的使用在前面博文已经讲述完毕,在完成一个最简单的服务器之后,就是要考虑下如何实现并发服务器了。 要实现服务的并发,只能通过进程和线程两种方式。 之前提到过listen_fd和connect_fd,listen用于监听是否有客户端连接,维护两个fd队列,没完成握手的和完成就绪的。 conne
阅读全文
线程同步(四)—— 信号
摘要:这篇是进程线程的博文的最后一篇了,至此进程线程的所有同步内容已经全部回顾完了。 其中信号和信号量看起来名字很像,实际上却是完全不一样的两个东西,信号和信号量在进程线程中都可以使用。而且使用方式也基本完全一样。 进程中的共享内存,线程中的互斥锁,条件变量。这些是独有的,但实际也能互相使用,《Unix网
阅读全文
线程同步(三)—— 信号量
摘要:线程信号量和进程信号量类似,Unix提供了两套与信号量有关的API。POSIX和System V。两套API都可以在线程和进程中使用。 进程中使用信号量是为了保证临界资源的控制,线程中已经有了互斥锁,而且还有条件变量对线程进行控制,信号量是不是就有点多余了呢? 其实在进程中也是可以使用互斥锁和控制变
阅读全文
线程同步(二)—— 条件变量
摘要:上篇提到线程针对临界值操作时需要加锁,但是线程访问临界资源只通过锁来控制是不够的。 比如对一个数据进行操作,A线程需要读,B线程进行写。 A线程先访问临界资源,发现没有数据可以读,只能等待B线程先写,此时又占用了互斥锁,导致B线程无法得到锁,进行写操作。 此时就需要用到条件变量了,条件变量的目的就是
阅读全文
线程同步(一)—— 互斥锁
摘要:在使用线程时,经常要注意的就是访问临界资源加锁。 在编码过程由于粗心忘记加锁将带来不可预知的错误。这类错误单次运行或小并发时难以复现,当数据量变大,用户数增多时,轻则系统崩溃,大则引起数据错误。造成损失。 线程中互斥锁与进程的信号量类似,也可以看做是PV操作,用于保护临界资源,确保只有一个线程访问。
阅读全文
进程同步(四)—— 消息队列
摘要:消息队列使用的API与信号量、共享内存类似。 消息队列、信号量、共享内存均可用ipcs命令查看以及ipcrm删除。 msgget首先向内核获取一个消息队列ID。 获取成功后,可用msgctl获取和设置队列相关信息。 msgsnd用于写消息队列。 msgrcv用于读消息队列。 消息队列遵循First
阅读全文
进程同步(三)—— 信号
摘要:程序在执行过程经常产生信号,有些是由内核发出,有些是由用户发出。 执行命令kill -l可以查看信号。 这些信号由系统定义,他们不是简单的int之类的数据类型,可能是调用一些函数。 这些信号中,10/12是给用户预留使用的,其他信号各有自己相应的含义。代码中无法完美的自定义信号,容易覆盖或产生系统错
阅读全文
进程同步(二)—— 信号量&内存共享
摘要:内存共享是进程间常用的通信方式,可以实现两个完全独立的进程通信。 在访问共享内存时,同时需要信号量进行访问控制。 使用ipcs -m命令可以查看系统共享内存,ipce -m + key 可以删除指定的共享内存。 对共享内存操作时,使用信号量对共享内存进行保护,类似与线程中的互斥锁。都可以看做是通过P
阅读全文
进程同步和线程同步概述
摘要:楼主本来是要继续写服务器并发的,但是后续的服务器相关点都和进程线程联系在一起,所以先把进程线程相关内容写完吧! 这次只写进程线程的概述,实际操作后续博文逐一代码实现。 进程同步or进程通信/线程同步or线程通信? 这两组概念迷惑我至今,网上和书籍对这个的描述也是爱用啥用啥的感觉,今天又重新理了一遍。
阅读全文
Socket编程回顾,一个最简单服务器程序
摘要:第一次接触服务器是快毕业的时候,是不是有点晚(# ̄ω ̄),这也导致工作方向一直没考虑网络编程这块,做了好多其他没啥“意思”的技术。 之前看到一篇博文提到程序猿80%都是庸才,10%是人才,10%是天才,深有感触。仔细想想自己是不是也是还在那80%里面挣扎?一个抱怨这抱怨那的trouble maker
阅读全文