软件理论
文章平均质量分 90
q1239678315
这个作者很懒,什么都没留下…
展开
-
【软件理论】MVC概念
一,MVC概念: 首先,关于MVC的概念解释: MVC是一种模式。全名为:Model-View-Controller。 中文的翻译解释为:“模式-视图-控制器”;MVC的应用程序往往都由这三个部分组成。二,MVC的模式介绍: Event(事件)导致Controller改变Model/View, Model改变将直接更新View,View依赖于Model。 其中,原创 2016-09-26 18:04:30 · 757 阅读 · 0 评论 -
Linux:前期总结
1.常见指令及权限理解一.计算机体系结构: 冯诺依曼体系结构:输入设备,存储器(控制器,运算器)。输出设备。环境变量: PATH,HOME,LOGNAME,SHELL,HOSTNAME(环境指令) echo,export,env,set,unset,readonly(环境变量设置)Linux文件类型: 普通文件[-],目录文件[d],连接文件[l],设备和设备文件[b],套原创 2016-09-26 18:06:21 · 140 阅读 · 0 评论 -
【网络】NAT与代理服务器
网络地址转换[编辑]维基百科,自由的百科全书在计算机网络中,网络地址转换(Network Address Translation,缩写为NAT),也叫做网络掩蔽或者IP掩蔽(IP masquerading),是一种在IP封包通过路由器或防火墙时重写来源IP地址或目的IP地址的技术。这种技术被普遍使用在有多台主机但只通过一个公有IP地址访问因特网的私有网络中。根据规范,路由器是不能这样工作的,但它的转载 2016-09-26 18:06:23 · 367 阅读 · 0 评论 -
【网络】ARP协议
其实在网络传输中,分为不同的层次,然后不同的层分类了不同的协议,我们来简单看一下协议的分类图:650) this.width=650;" src="http://s5.51cto.com/wyfs02/M01/80/20/wKiom1c4eFvwbdc0AACSZKmYUWo516.jpg" title="Image.jpg" alt="wKiom1c4eFvwbdc0AACSZKmYUWo516原创 2016-09-26 18:06:26 · 187 阅读 · 0 评论 -
【网络】TCP协议
TCP协议:对于网络协议而言。TCP在传输层中是一个十分钟要的协议,那么什么是TCP协议呢?TCP协议概念: 传输控制协议(英语:Transmission Control Protocol,缩写为 TCP)是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IETF的RFC 793定义。在简化的计算机网络OSI模型中,它完成第四层传输层所指定的功能,用户数据报协议(UDP)是同一层内另一原创 2016-09-26 18:06:29 · 248 阅读 · 0 评论 -
socket编程:简单TCP服务器/客户端编程
其实对于socket:我们需要理解的是他提供了一种编程概念,利用socket就可以利用系统已经封装好的内部进行通信,我们只需要关注应用层方面的数据控制就OK了。一. 套接字(socket) socket英文为插座的意思,也就是为用户提供了一个接入某个链路的接口。而在计算机网络中,一个IP地址标识唯一一台主机,而一个端口号标识着主机中唯一一个应用进程,因此“IP+端口号”就可以称之为socke原创 2016-09-26 18:06:32 · 417 阅读 · 0 评论 -
socket编程:简单UDP服务器/客户端编程
对于之前的TCP协议而言,他是可靠的字节流传输,而在socket编程中,在不需要保证数据传输正确安全的情况下。或者由用户自己完成传输确认情况/服务端客户端自己实现数据传输。套接字编程也提供了UDP协议的方法。基于UDP(不是面向连接)的socket编程,分为客户端和服务器端。客户端的流程如下:(1)创建套接字(socket)(2)和服务器端进行通信(sendto)(3)关闭套接字因为在socket原创 2016-09-26 18:06:34 · 506 阅读 · 0 评论 -
socket编程:多路复用I/O服务端客户端之select
其实在之前的TCP之中,我们编程实现了多进程,多线程机制下的TCP服务器,但是对于这种的TCP服务器而言,存在太大的资源局限性。所以我们可以是用I/0模型中的多路复用I/O模型来进行编程。他的具体思想就是:当前进程可以处理多个相应时间,记录多个描述符,然后控制轮询时间态,当有响应产生的时候我们就去保存当前响应文件描述符,对他进行连接处理/数据传输就OK了。在一个进程进行多个响应时间的答复情况下,可原创 2016-09-26 18:06:37 · 2835 阅读 · 0 评论 -
socket编程:I/O模型
在TCP服务器编程那篇博客中,我们提到了更加优化连接方式,其实就是关于I/O的传输模型: 我们常见的几种I/O模型:阻塞式I/O模型:当进程进行数据传输连接的时候,只能够阻塞的等待数据的到来,而无法去干其他的事情,将服务进程的所有精力全部去应付当前连接;图解:650) this.width=650;" src="http://s5.51cto.com/wyfs02/M00/80/F4/wK原创 2016-09-26 18:06:40 · 187 阅读 · 0 评论 -
socket编程:多路复用I/O服务端客户端之poll
一. 关于poll 对于IO复用模型,其优点无疑是免去了对一个个IO事件就绪的等待,转而代之的是同时对多个IO数据的检测,当检测等待的事件中至少有一个就绪的时候,就会返回告诉用户进程“已经有数据准备好了,快看看是哪个赶紧处理”,而对于IO复用的实现,除了可以用select函数,另外一个函数仍然支持这种复用IO模型,就是poll函数;二. poll函数的用法 虽然同样是对多个IO事件进行原创 2016-09-26 18:06:43 · 360 阅读 · 0 评论 -
socket编程:多路复用I/O服务端客户端之epoll
什么是epollepoll是什么?按照man手册的说法:是为处理大批量句柄而作了改进的poll。当然,这不是2.6内核才有的,它是在2.5.44内核中被引进的(epoll(4) is a new API introduced in Linux kernel2.5.44),它几乎具备了之前所说的一切优点,被公认为Linux2.6下性能最好的多路I/O就绪通知方法。epoll的相关系统调用其实对于ep原创 2016-09-26 18:06:46 · 209 阅读 · 0 评论 -
多路复用IO实现方式:select,poll,epoll的区别
三种多路复用IO实现方式:select,poll,epoll的区别直接看表:650) this.width=650;" src="http://s2.51cto.com/wyfs02/M01/82/36/wKiom1dOg9bDYNEDAAGMO8Q7A8U991.png" title="IO.png" alt="wKiom1dOg9bDYNEDAAGMO8Q7A8U991.png" />以下内容原创 2016-09-26 18:06:49 · 341 阅读 · 0 评论 -
数据库:事务(存储引擎)
事务其实对于事务而言,我们就是为了数据库恢复技术而产生的概念。 事务(Database Transaction) ,是指作为单个逻辑工作单元执行的一系列操作,要么完全地执行,要么完全地不执行。 事务处理可以确保除非事务性单元内的所有操作都成功完成,否则不会永久更新面向数据的资源。通过将一组相关操作组合为一个要么全部成功要么全部失败的单元,可以简化错误恢复并使应用程序更加可靠。 对于事务原创 2016-09-26 18:07:01 · 172 阅读 · 0 评论 -
URI,URL,URN
首先,URI,是uniform resource identifier,统一资源标识符,用来唯一的标识一个资源。而URL是uniform resource locator,统一资源定位器,它是一种具体的URI,即URL可以用来标识一个资源,而且还指明了如何locate这个资源。而URN,uniform resource name,统一资源命名,是通过名字来标识资源,比如mailto:java-ne原创 2016-09-26 18:08:12 · 615 阅读 · 0 评论 -
动态规划:从新手到专家
作者:Hawstein出处:http://hawstein.com/posts/dp-novice-to-advanced.html前言本文翻译自TopCoder上的一篇文章: Dynamic Programming: From novice to advanced ,并非严格逐字逐句翻译,其中加入了自己的一些理解。水平有限,还望指摘。前言_我们遇到的问题中,有很大一部分可以用动态规划(简称DP)转载 2016-09-26 18:08:20 · 601 阅读 · 0 评论 -
Linux:守护进程
守护进程也称精灵进程(Daemon): 是运行在后台的一种特殊进程。他独立与控制终端并且周期性的执行某种任务或者处理某些发生的事情。守护进程是一种很有用的进程,在操作系统中,维护系统各种设施的进程。 在Linux中,大多数服务器就是守护进程实现的:比如:Internet服务器inetd,Web服务器httpd在上一篇博文例行性工作中。crond就是守护进程进行的任务。系统服务进程不受用原创 2016-09-26 18:06:18 · 138 阅读 · 0 评论 -
Linux:例行性工作
什么是例行性工作? 其实对于例行性工作而言就是在当前环境下周期性进行的必须工作。在Linux下,有2种例行性工作种类:一种是突发性,做完以后就没有的那种 at:at是个可以处理仅执行一次就结束调度的命令,不过要执行at,必须要有atd这个服务。在某些Linux版本中这个服务项目不是默认开启的,所以我们需要对这个服务进行开启。另外一种是例行性的,就是每隔一定的周期要来办的事项: cro原创 2016-09-26 18:06:15 · 367 阅读 · 0 评论 -
理解inode
转载自:http://www.ruanyifeng.com/blog/2011/12/inode.html一、inode是什么?理解inode,要从文件储存说起。文件储存在硬盘上,硬盘的最小存储单位叫做"扇区"(Sector)。每个扇区储存512字节(相当于0.5KB)。操作系统读取硬盘的时候,不会一个个扇区地读取,这样效率太低,而是一次性连续读取多个扇区,即一次性读取一个"块"(block)。这转载 2016-09-26 18:05:25 · 124 阅读 · 0 评论 -
关于vfork的一个问题
为什么vfork的子进程里面用return,整个程序会挂掉,而exit()不会。 首先我们来看一下,出现挂掉的代码: #include #include #include int main() { int var; var = 88; if((pid = vfork()) < 0) { printf("error原创 2016-09-26 18:05:29 · 279 阅读 · 0 评论 -
Linux进程间通信:管道
提到进程间通信,我们需要先了解一下进程是什么: 其实在Linux下,早期的Linux为了实现多个程序之间的交替操作,出现了进程的概念。为的就是维护操作系统整个的运行逻辑。并发就是进程间的交替执行。进程是程序的动态实例。进程并发运行的环境中,多个进程之间存在如下竞争和合作的关系:- 进程中的资源争用(间接作用)当并发进程竞争使用同一个资源时,它们之间就会发生冲突。为了避免冲突原创 2016-09-26 18:05:32 · 147 阅读 · 0 评论 -
Linux进程间通信:消息队列
一、什么是消息队列消息队列提供了一种从一个进程向另一个进程发送一个数据块的方法。 每个数据块都被认为是有一个类型,接收者进程接收的数据块可以有不同的类型值。我们可以通过发送消息来避免命名管道的同步和阻塞问题。消息队列与管道不同的是,消息队列是基于消息的,而管道是基于字节流的,且消息队列的读取不一定是先入先出。消息队列与命名管道有一样的不足,就是每个消息的最大长度是有上限的(MSGMAX),每个消息原创 2016-09-26 18:05:37 · 129 阅读 · 0 评论 -
Linux进程间通信:信号量
上次书写了进程间通信的消息队列,这次是IPC中的另一个模块。信号量 信号量是什么? 荷兰计算机科学家Dijkstra把互斥的关键含义抽象称为信号量(semaphore)概念。信号量是一个被保护的量。 信号量的本质是一种数据操作锁,它本身不具有数据交换的功能,而是通过控制其他的通信资源(文件,外部设备)来实现进程间通信,它本身只是一种外部资源的标识。信号量在此过程中负责数据操原创 2016-09-26 18:05:40 · 144 阅读 · 0 评论 -
Linux之线程:控制与分离
之前我一直都提到的是进程,现在多了一个线程的概念,从字面意思来看,线程应该比进程小。嘿嘿。 其实操作系统刚开始的时候,提出进程概念后,操作系统一直都是以进程作为独立运行的基本单位,然后有人感觉了,这不对呀,进程之间的中断转换太浪费了,并且用户态到核心态的切换也有点麻烦,所以在80年代中期,人们又提出了毕竟更小的独立运行的基本单位咯--线程,用来提高系统内存程序的并发执行程度。所以线程就这么出现了。原创 2016-09-26 18:05:43 · 192 阅读 · 0 评论 -
Linux进程间通信:共享内存
之前提到了进程间通信的管道,消息队列,信号量,然后其中信号量是PV操作,操控的是一个共享资源。在我们提到的IPC模块中,消息队列针对的是数据单元的信息传送,管道不属于system V IPC的部分,所以按照一个操作系统的整体来说,他应该也有着一个关于字节流的消息传输,并且要比之前都要快,还要跟我们之前所说的信号量利用起来,所以就出现了共享内存的概念。 什么是共享内存? 共享内存是多个进程之原创 2016-09-26 18:05:46 · 159 阅读 · 0 评论 -
Linux之线程:同步与互斥
首先我们来说一下同步是什么: 其实所谓同步,就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回,同时其它线程也不能调用这个方法。按照这个定义,其实绝大多数函数都是同步调用(例如sin, isdigit等)。但是一般而言,我们在说同步、异步的时候,特指那些需要其他部件协作或者需要一定时间完成的任务。例如Window API函数SendMessage。该函数发送原创 2016-09-26 18:05:52 · 156 阅读 · 0 评论 -
Linux:死锁问题
之前的博客都多次提到了死锁问题,那么我们先来了解一下。 什么是死锁? 其实死锁是指在多道程序系统中,一组进程中的每一个进程均无期限的等待被该组进程中的另一个进程所占有且永远不会释放的资源,线程一样。这种现象称系统处于死锁状态,简称死锁。处于死锁状态的进程称为死锁进程。 产生死锁的四个必要条件: 其实死锁产生:1.资源竞争,2.多道程序运行时的进程推进顺序不合理。 也就是4个必要原创 2016-09-26 18:05:55 · 262 阅读 · 0 评论 -
Linux:生产者与消费者模式
生产者:生产数据消费者:消费数据提供场所:缓冲区,eg:超市生产者消费者特点:三种关系,两类人,一个场所三种关系指的是:生产者与生产者之间是互斥关系 消费者与消费者之间是互斥关系 生产者与消费者之间是同步与互斥关系两类人:生产者,消费者一个场所:存储数据(此处用带头单链表实现)单生产者单消费者模式:此例取数据方式为FIFO先进先出。利用互斥锁实现单生产者单消费者模式。#原创 2016-09-26 18:05:58 · 275 阅读 · 0 评论 -
Linux:各种锁
其实在操作系统中,都存在着多进程与多线程来优化处理整个操作系统的逻辑,不仅仅在操作系统,我们所编写的程序中都一样存在着各种地方使用多进程多线程,虽然多进程多线程看着很好很强大,但是总存在着非原子性情况下的执行顺序确定操作。 所以就出现了信号量,条件变量,互斥锁等各种确保多线程/进程的执行顺序。信号量的可以查看: Linux进程间通信:信号量 Linux:生产者与消费者模式原创 2016-09-26 18:06:01 · 462 阅读 · 0 评论 -
Linux:信号(上)
从我的博客之前的文章中,一直都在强调操作系统是由多进程协同工作而实现整个操作系统的逻辑目的,达到一个人为操纵的系统: 之前的博文一直都在描述进程控制,进程之间的通信,还有线程控制与操作,但是却一直没有描述多个进程之间的相互是怎么通知整个系统的。对于多个不同进程之间,出现了异常或者进程间非数据传输的通信怎么实现,所以Linux系统就实现了一个概念叫做信号: 信号就相当于我们现实生活之中的原创 2016-09-26 18:06:04 · 242 阅读 · 0 评论 -
线程安全与可重入函数
在之前的博文中有说过线程,线程是一个执行流,一个指令序列,一个指令分支,为了共享资源而产生的线程,但只要是资源,都会出现资源的数目与操作安全问题,所以在线程这一块,设计了信号量,条件变量,各种锁,来保证资源的访问独占性与原子性。 什么是线程安全? 线程安全指的是在多线程访问情况下,保证线程对临界资源的操作原子性,在临界区中,不允许其他的线程进行插入访问造成了数据的乱序占用而修改,产原创 2016-09-26 18:06:10 · 161 阅读 · 0 评论 -
Linux:信号(下)
在Linux:信号上博文中我们写了一个mysleep,但是实际上这个函数在多线程环境下是会出现错误的,也就是我们这个mysleep函数并不是可重入函数,现在重新审视“mysleep”程序,设想这样的时序:1. 注册SIGALRM信号的处理函数。2. 调用alarm(nsecs)设定闹钟。3. 内核调度优先级更高的进程取代当前进程执行,并且优先级更高的进程有很多个,每个都要执行很长时间4. nsec原创 2016-09-26 18:06:12 · 176 阅读 · 0 评论 -
Linux 上实现双向进程间通信管道
转载于:https://www.ibm.com/developerworks/cn/linux/l-pipebid/ 问题和常见方法Linux 提供了 popen 和 pclose 函数 (1),用于创建和关闭管道与另外一个进程进行通信。其接口如下:FILE *popen(const char *command, const char *mode);int pclose(FILE *stream转载 2016-09-26 18:08:23 · 669 阅读 · 0 评论