0%

1 TCP/IP协议

TCP/IP协议套件是一个分层联网协议,它包括因特网协议(ip)和位于其上层的各个协议层。

1.1 OSI七层模型和TCP/IP模型

各层协议主要有:

  • 应用层协议: FTP(文件传输协议)、HTTP(超文本传输协议)、NFS(网络文件系统)
  • 传输层协议: TCP (传输控制协议)、UDP(用户数据报协议)
  • 网络层:IP(英特网互联协议)ICMP(英特网控制报文协议ping) 、IGMP(英特网组管理协议)
  • 链路层协议:ARP(地址解析协议 通过ip找mac地址)、RARP:(反向地址解析协议 通过mac找ip)
阅读全文 »

读者注意:本博客是关于C++11新标准下的并发和多线程编程(C++多线程有C++11、Boost线程库和POSIX多线程三大版本)

  • POSIX的线程相关更多的是函数形式,这也理所当然,因此底层是C
  • C++标准多线程和Boost线程是类形式,这点要注意。

1 概览

1.1 认识并发

如下图,在单核处理器中我们可看到AB两任务是以“这个任务做一会,再切换到别的任务,再做一会儿”的方式,让任务看起来是并行执行的。这种方式称为“任务切换(task switching)”。但是,实际上是并发形式的,因为任务切换得太快,以至于无法感觉到任务在何时会被暂时挂起 系统每次从一个任务切换到另一个时都需要切换一次上下文(context switch),任务切换也有时间开销。

阅读全文 »

1 线程(熟悉)

  • 进程:程序是存放在存储介质上的一个可执行文件,而进程是程序执行的过程。进程的状态是变化的,其包括进程的创建、调度和消亡。因此程序是静态的,进程是动态的。是CPU分配资源的最小单位

  • 线程:线程(thread)是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位。线程是CPU调度的最小单位

1.1 进程和线程的区别
  • 进程,直观点说,保存在硬盘上的程序运行以后,会在内存空间里形成一个独立的内存体,这个内存体有自己的地址空间,有自己的堆,上级挂靠单位是操作系统。操作系统会以进程为单位,分配系统资源,所以我们也说,进程是CPU分配资源的最小单位。
阅读全文 »

1 进程概念

1.1 进程和线程的区别
  • 进程:程序是存放在存储介质上的一个可执行文件,而进程是程序执行的过程。进程的状态是变化的,其包括进程的创建、调度和消亡。程序是静态的,进程是动态的。是CPU分配资源的最小单位
  • 线程:线程(thread)是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位。线程是CPU调度的最小单位
阅读全文 »

1.基本概念

这里我们只对一些概念做简单介绍,让第一次接触的读者有一个大概的映像。后续会进行详细的讲述 ##### 1.1 操作系统的核心-内核 操作系统是指完整的软件包,它包括了用来管理和分配计算机资源的核心层软件,以及附带所有标准软件工具,诸如命令行解释器、图形用户界面、文件操作工具和文件编辑器等。其中最为重要的是其核心层软件——内核:

内核:内核执行的主要任务是进程调度、内存管理、提供系统文件、创建和终止进程、对设备的访问、联网、提供系统调用应用编程接口(API)

  • 进程调度:计算机均配备一个或多个CPU以执行程序指令,Linux与其他系统如Windows一样属于抢占式多任务操作系统,即多个任务(进程)可同时驻留在CPU中,每个进程都可以获得对CPU的使用权,那么内核就得规定什么时候哪个进程占有CPU进行处理。
  • 内存管理:linux当中采用了虚拟内存管理机制,这种机制有两个优点:是使得进程与进程之间,进程与内核之间彼此隔离,一个进程无法读取或修改内核或其他进程的内存内容;是只需将进程的一部分保存在内存中,降低了每个进程对内存的需求量,使得RAM能够加载更多的进程。
  • 系统调用:内核提供了系统调用应用编程接口,这样进程可以利用内核入口点(系统调用)请求内核去执行各种任务,如epoll
阅读全文 »

1. github无法访问

由于github是外国网站,常常会有些时候无法登进去,这是由于github的IP地址时常会发生改变,我们在浏览器输入 GitHub 的网址时,会向 DNS 服务器发送一个请求,获取到 GitHub 网站所在的服务器 IP 地址,从而进行访问。如果DNS未即使更新地址的话给你一个过期ip,你自然无法访问到。为解决这个问题,可以通过修改host。

阅读全文 »

1. github上的博客域名挂靠

由于github是外国网站,存在者有时候节点ip无法访问到github,导致博客也登不上去,为了解决这个方法,可以使用域名进行挂靠。

1.1 域名设置

域名购买可以买腾讯云、阿里喝华为的,这里以腾讯云为例子,点击域名购买。购买完成后,进入域名控制平台->我的域名,进行设置:

点击解析,进入如下页面: 然后增加CNAME记录类型,其记录值为你的博客地址,如我的为trluper.github.io

阅读全文 »

6.1 vim的三种模式

vi有三种基本工作模式: 命令模式、文本输入模式(编辑模式)、末行模式

  • 命令模式: 任何时候,不管用户处于何种模式,只要按一下ESC键,即可使vi进入命令模式。我们在shell环境(提示符为$)下输入启动vim命令,进入编辑器时,也是处于该模式下。在命令模式下,用户可以输入各种合法的vi命令,用于管理自己的文档。此时从键盘上输入的任何字符都被当做编辑命令来解释,若输入的字符是合法的vi命令,则vi在接受用户命令之后完成相应的动作。但需注意的是,所输入的命令并不在屏幕上显示出来。若输入的字符不是vi的合法命令,vi会响铃报警。
阅读全文 »

在本笔记中主要对《Effective C++》一书中的重要条款做学习笔记,提取当中主要的知识点和面试考点,读者在进行C plus plus岗位面试前可细读该篇文章的(重要)部分。

1 条款1:视C++为一个语言联邦

在C++中我们总会有一种错觉,那就是人为C++主要就是面向对象的编程,但是这是不全面的,作为从C中延伸的语言,它保留了C的特性,也集成了许多新的功能,你可理解成:

  • C:以C为基础。
  • 面向对象的C++:添加面向对象特性。
  • 模板C++:泛型编程概念,使用模板。
  • STL:使用STL的容器、迭代器、算法、及函数对象。

四者的集合

阅读全文 »

1. torch

包 torch 包含了多维张量的数据结构以及基于其上的多种数学操作。另外,它也提供了多种工具,其中一些可以更有效地对张量和任意类型进行序列化。

它有 CUDA 的对应实现,可以在 NVIDIA GPU 上进行张量运算(计算能力>=2.0)。

阅读全文 »