linux-c之线程

线程概念

线程是允许应用程序并发执行多个任务的一种机制。
由于同一进程的多个线程共享同一地址空间,因
此Text Segment、Data Segment都是共享的,如果定义一个函数,在各线程中都可以调用,如
果定义一个全局变量,在各线程中都可以访问到,除此之外,各线程还共享以下进程资源和环
境:

  • 文件描述符表
  • 每种信号的处理方式( SIG_IGN 、 SIG_DFL 或者自定义的信号处理函数)
  • 当前工作目录
  • 用户id和组id
    但有些资源是每个线程各有一份的:
  • 线程id
  • 上下文,包括各种寄存器的值、程序计数器和栈指针
  • 栈空间
  • errno 变量
  • 信号屏蔽字
  • 调度优先级
    我们将要学习的线程库函数是[……]

    继续阅读

linux-c之信号

信号的基本概念

信号是linux系统中进程间通讯的方式,是一种异步的通知机制,用来提醒进程一个事件已经发生。
为了理解信号,先从我们最熟悉的场景说起:

  1. 用户输入命令,在Shell下启动一个前台进程。
  2. 用户按下Ctrl-C,这个键盘输入产生一个硬件中断。
  3. 如果CPU当前正在执行这个进程的代码,则该进程的用户空间代码暂停执行,CPU从用户
    态切换到内核态处理硬件中断。
  4. 终端驱动程序将Ctrl-C解释成一个 SIGINT 信号,记在该进程的PCB中(也可以说发送了一
    个 SIGINT 信号给该进程)。
  5. 当某个时刻要从内核返回到该进程的用户空间代码继续执行之前,首先处理PCB中记录的
    信号,发现有一个[……]

    继续阅读

linux-c之进程

进程控制块(PCB)

每个进程在内核中都有一个进程控制块(PCB)来维护进程相关的信息,Linux内核
的进程控制块是 task_struct 结构体。

  • 进程id。
  • 进程的状态,有运行、挂起、停止、僵尸等状态。
  • 文件描述符表,包含很多指向 file 结构体的指针。
  • 当前工作目录(Current Working Directory)。
  • 用户id和组id。
  • 和信号相关的信息。
  • 进程切换时需要保存和恢复的一些CPU寄存器。
  • 描述虚拟地址空间的信息。
  • 描述控制终端的信息。
  • umask 掩码。
  • 控制终端、Session和进程组。
  • 进程可以使用的资源上限(Resource Limit)。

子进程的PCB[……]

继续阅读

导航网格寻路C++实现版(进阶版)

这个也是俺的github上的一个导航网格寻路小demo的readme文件,这个工程在原来的基础上有添加了些功能,如果有兴趣可以去俺的github上看看

小demo说明

这个小demo是导航网格寻路C++实现版(入门版)的进阶版,如果你没有看那个工程的话,可以先出门左转看看那个入门版的。那个实现了一个最基本的导航网格寻路,功能简单,代码量也不多,适合没有接触或刚接触寻路功能的朋友们。
而这个是在之前的基础上又新增了一些功能,可以支持更多种类的寻路地图。如果您看过之前那个版本的代码实现的话,再看这个应该是很好看懂的。

新增了那些功能

  1. 之前的版本一个地图是只支持一个多边形的,而且多边形不支持嵌套[……]

    继续阅读

导航网格寻路C++实现版(入门级)

这个是俺的github上的一个导航网格寻路小demo的readme文件,如果读后兴趣的话可以去俺的github上去溜达一圈,可能会有点小收获呢,哈哈哈哈 🙂

小demo说明

每个mmorpg游戏中都会少不了有寻路模块,且还是开发中的一个难点,涉及到地形资源、客户端、服务器端,涉及到的算法还比较多,还得注意它的性能开销。相信不少游戏开发者都想弄清楚它是怎么实现的。网上讲解这方面的文章也有不少,github上的开源实现也有一些,不过有很大一部分是unity相关的,或者c#实现的。c++的实现也有,但是没几个像俺这样对初级中级程序员这么友好的。友好的原因如下:

  • 俺的这版是导航网格寻路的最简化版[……]

    继续阅读

老司机的goole搜索技术

小事儿用百度,大事儿用谷歌,这个大家都知道,但是google有一些高级的搜索语法和搜索技巧可能大家还不太了解,这么俺在这里就给大伙总结了一下,希望大家多多运用下面的技巧,假以时日,必能百搜百中。

关键词的逻辑关系

  • and
    xx 空格 xx,关键字越多越精确,要善于总结关键字,一般也是最常用的技巧
  • or
    xx OR xx, OR 一定要【大写】
  • not
    xx -xx, (-后面没有空格)从搜索结果中排除特定字词,如: android 网络定位时 -GPS, 搜索结果不带GPS
  • 近义词
    ~ 紧挨着关键词之前放波浪号 ~ 表示搜索同义词。
    有了这个功能,你就不必用 OR 写一堆关键词。因为 Go[……]

    继续阅读

如何成为优秀开发人员

这篇博文是看的编程随想的系列文章后整理而来的,此博客的文章质量还是非常高的,不过看的话需要自备梯子去翻墙。

0.怎样算是优秀的

对于大部分的软件开发团队都有这样的一个现象,那就是团队中的少数(一般来说,小于总人数的20%)开发人员具有更快的开发效率、更好的程序设计、更好的代码质量、更善于 debug、更能够解决技术难题……(总之就是让 team leader 事事省心)。而且这一小撮开发人员的贡献总和可能与另外那一大撮人(大于总人数的80%)的贡献总和不相上下(甚至可能超过)。那么,这一小撮开发人员,就是我所谓的优秀开发人员。

1.关于兴趣

因为物理学超级大牛爱因斯坦曾说过:兴趣[……]

继续阅读

leader绩效评价

以下的测试表是俺在之前的游戏公司中给leader测评用的,每隔一段时间HRBP就会给项目组的所有员工发这么个问卷以调查本项目组leader的情况。发给俺的时候一般5秒就搞定,因为俺都选了B,哈哈,典型的员工心态,事不关己高高挂起。后来突然有一天俺才有了觉悟,俺要先学会识别项目组leader的各项能力,他们那些方面做的好,那些方面做得差自己心中要有个大概。做的好是为什么做的好,做的差又是为什么做得差。好的咱要向人家学习,差的咱得想怎样做才能做的更好。遵循这样的逻辑咱们才能让自己做的更优秀,才能自己达到leader的水平。恩,没毛病!

  1. 项目的方向
    A. 保证项目的方向没有偏差
    B. 虽然有时[……]

    继续阅读

unity一键打包––ios篇

本文记录了unity打ios包的相关知识点,以及我的之前的一个mmo游戏项目中的打包脚本,项目所用的unity版本为5.6.6f2

一:申请开发者账号

打包的时候需要苹果的开发者账号,时间差不多得两周到一个月左右,得提前准备好申请需要的材料以加快申请的速度。、
公司的开发者账号只有一个,但是开发一个项目是需要多人配合的,总不能所以人都用同一个公司的开发者账号吧。这时需要把开发人员的账号添加到公司的开发者账号的team中。

二:mac系统版本的选择

mac系统的版本要和unity版本一直才能不出问题,这个系统不匹配的问题恰好被我给碰到了。
运行unity时黑屏先查看错误日志,网上查了下是缺少[……]

继续阅读

linux服务器的性能能分析

对于Linux系统来说,当运行应用程序出现问题时,要从应用程序本身、操作系统、服务器硬件和网络环境等方面综合排查,深度剖析问题出现在哪个部分,才能有针对性地解决。
分析操作系统级性能可以分为以下两步:
1.需要知道服务器硬件的规格,以了解可以承受的极限是多少。
2.需要知道各种资源的使用率,以了解性能的瓶颈。

一:影响Linux服务器性能的主要因素

1.cpu

总的来说核数越多、主频越高性能就越高,当然需要的money就越高
这里有几个概念:
1、一台物理机的物理CPU的个数
2、一个CPU上的核数
3、一个核上面支持的线程数
有下面的计算公式:
总核数 = 物理CPU个数 x 每[……]

继续阅读