<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Replus_的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/Replus_</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; Replus_]]></copyright><item><title><![CDATA[epoll源码分析]]></title><link>https://blog.youkuaiyun.com/Replus_/article/details/96123476</link><guid>https://blog.youkuaiyun.com/Replus_/article/details/96123476</guid><author>Replus_</author><pubDate>Tue, 16 Jul 2019 15:43:05 +0800</pubDate><description><![CDATA[码字不易，转载请标明出处


前言

Linux内核提供了3个关键函数供用户来操作epoll，分别是：

epoll_create(), 创建eventpoll对象
	epoll_ctl(), 操作eventpoll对象
	epoll_wait(), 从eventpoll对象中返回活跃的事件
而操作系统内部会用到一个名叫epoll_event_callback()的回调函数来调度epoll对...]]></description><category></category></item><item><title><![CDATA[『项目总结』基于线程池的矢量瓦片切割技术]]></title><link>https://blog.youkuaiyun.com/Replus_/article/details/90084713</link><guid>https://blog.youkuaiyun.com/Replus_/article/details/90084713</guid><author>Replus_</author><pubDate>Fri, 10 May 2019 22:18:57 +0800</pubDate><description><![CDATA[最近把项目中负责矢量瓦片切割的功能模块做成了并行计算模式，写一篇博客来总结一下。



1. 技术简介

1.1 矢量瓦片

传统的栅格地图切片，是服务器端预先绘制的PNG或JPG切片集合。而矢量地图切片将矢量数据通过不同的描述文件来组织和定义，通常通过自定义文件或json文件进行传输，在前端按需请求不同的矢量瓦片数据文件，并利用CANVAS等技术进行绘制。使用这种技术有不少好处，例如不再需要为...]]></description><category></category></item><item><title><![CDATA[『APUE自学笔记』高级IO]]></title><link>https://blog.youkuaiyun.com/Replus_/article/details/89375909</link><guid>https://blog.youkuaiyun.com/Replus_/article/details/89375909</guid><author>Replus_</author><pubDate>Thu, 18 Apr 2019 12:06:32 +0800</pubDate><description><![CDATA[非阻塞

思考：读普通文件会阻塞吗？


读普通文件时，如果读到了数据就成功返回，如果没有读到数据返回0，总之不会阻塞。


思考：写文件时会阻塞吗？


在写某些文件时，当文件不能立即接收写入的数据时，也可能会导致写操作阻塞，一直阻塞到写成功为止。


如何实现非阻塞读？



open()打开文件时指定O_NONBLOCK状态标志；
通过fcntl函数指定O_NONBLOCK来实现；


文件...]]></description><category></category></item><item><title><![CDATA[『APUE自学笔记』进程间通信]]></title><link>https://blog.youkuaiyun.com/Replus_/article/details/89357906</link><guid>https://blog.youkuaiyun.com/Replus_/article/details/89357906</guid><author>Replus_</author><pubDate>Wed, 17 Apr 2019 15:54:46 +0800</pubDate><description><![CDATA[IPC概述

进程间实现数据共享容易吗？


如果进程空间之间有可以共享的交叠空间的话，进程间可以通过这个交叠的空间，很容易的就能实现数据共享。但是实际情况是，每个进程的进程空间是完全独立的，进程空间没有任何的交叠，所以实现数据共享的难度很高。


为什么进程空间是完全独立的?


每个进程的虚拟地址范围虽然都是相同的（由0~2^32）但是各个进程通过内存映射机制，映射一段独立的物理内存。所以进程...]]></description><category></category></item><item><title><![CDATA[『APUE自学笔记』线程]]></title><link>https://blog.youkuaiyun.com/Replus_/article/details/89279608</link><guid>https://blog.youkuaiyun.com/Replus_/article/details/89279608</guid><author>Replus_</author><pubDate>Sat, 13 Apr 2019 11:15:10 +0800</pubDate><description><![CDATA[进程的缺点
（1）进程间切换的计算机资源开销很大，切换效率非常低

OS是通过虚拟内存机制来实现进程空间独立的，进程在并发运行时需要相互间的切换，切换时必然涉及虚拟内存机制的控制，但是虚拟内存机制比较复杂，所以在进行进程间切换时，会耗费CPU、cache、内存等计算机资源，也非常耗费切换时间。

（2）进程间数据共享的开销很大

当程序涉及多进程时，往往会涉及到进程间的通信，OS提供了各种各样的通...]]></description><category></category></item><item><title><![CDATA[『APUE自学笔记』进程控制]]></title><link>https://blog.youkuaiyun.com/Replus_/article/details/89228600</link><guid>https://blog.youkuaiyun.com/Replus_/article/details/89228600</guid><author>Replus_</author><pubDate>Fri, 12 Apr 2019 11:17:27 +0800</pubDate><description><![CDATA[三个特殊进程

PID==0（调度进程）


作用：实现进程间的调度和切换，该进程会让CPU轮换的执行所有的进程。
OS启动起来后，最后有一部分代码会持续的运行，这个就是调度的进程。由于这个进程是OS的一部分，凡是由OS代码演变来的进程，都称之为系统进程。


PID==1（init进程）


作用1：初始化。他会去读取各种各样的系统文件，使用文件中的数据来初始化OS的启动。
作用2：托管孤儿进程...]]></description><category></category></item><item><title><![CDATA[『APUE自学笔记』进程环境]]></title><link>https://blog.youkuaiyun.com/Replus_/article/details/89210895</link><guid>https://blog.youkuaiyun.com/Replus_/article/details/89210895</guid><author>Replus_</author><pubDate>Thu, 11 Apr 2019 14:58:53 +0800</pubDate><description><![CDATA[启动代码
C程序运行时，最开始运行的是启动代码，启动代码再去调用main函数，然后整个C程序都已运行。
由编译器提供的，一般有两种提供方式：①源码、②二进制(gcc采用这种)
gcc -v [文件名]  可以查看gcc编译链接的详细情况时，可以看到有很多*.o，这些 .o文件就是gcc提供的启动代码。
启动代码由汇编语言编写

在程序的内存空间结构还没有布局起来之前，高级语言程序还无法运行，此时只...]]></description><category></category></item><item><title><![CDATA[『APUE自学笔记』文件IO]]></title><link>https://blog.youkuaiyun.com/Replus_/article/details/89196800</link><guid>https://blog.youkuaiyun.com/Replus_/article/details/89196800</guid><author>Replus_</author><pubDate>Wed, 10 Apr 2019 22:13:16 +0800</pubDate><description><![CDATA[注意！以下系统调用的具体使用方法可通过"man 2 open"命令查看使用手册。]]></description><category></category></item><item><title><![CDATA[Linux 3.9内核新特性SO_REUSEPORT]]></title><link>https://blog.youkuaiyun.com/Replus_/article/details/88979342</link><guid>https://blog.youkuaiyun.com/Replus_/article/details/88979342</guid><author>Replus_</author><pubDate>Tue, 02 Apr 2019 19:40:51 +0800</pubDate><description><![CDATA[转自：http://www.cnblogs.com/Anker/p/7076537.html

1、前言

　　昨天总结了一下Linux下网络编程“惊群”现象，给出Nginx处理惊群的方法，使用互斥锁。为例发挥多核的优势，目前常见的网络编程模型就是多进程或多线程，根据accpet的位置，分为如下场景：

　　（1）单进程或线程创建socket，并进行listen和accept，接收到连接后创建进程...]]></description><category></category></item><item><title><![CDATA[Epoll在LT和ET模式下的读写方式]]></title><link>https://blog.youkuaiyun.com/Replus_/article/details/88979265</link><guid>https://blog.youkuaiyun.com/Replus_/article/details/88979265</guid><author>Replus_</author><pubDate>Tue, 02 Apr 2019 19:37:33 +0800</pubDate><description><![CDATA[转自：https://blog.youkuaiyun.com/qq_21910105/article/details/79983960

在一个非阻塞的socket上调用read/write函数, 返回EAGAIN或者EWOULDBLOCK(注: EAGAIN就是EWOULDBLOCK)

从字面上看, 意思是:EAGAIN: 再试一次，EWOULDBLOCK: 如果这是一个阻塞socket, 操作将被blo...]]></description><category></category></item><item><title><![CDATA[Linux线程同步之条件变量pthread_cond_t]]></title><link>https://blog.youkuaiyun.com/Replus_/article/details/88836149</link><guid>https://blog.youkuaiyun.com/Replus_/article/details/88836149</guid><author>Replus_</author><pubDate>Wed, 27 Mar 2019 09:04:45 +0800</pubDate><description><![CDATA[转自：https://www.cnblogs.com/zhx831/p/3543633.html

一直以来都天真的认为线程间同步的方法只有信号量，互斥量，邮箱，消息队列，知道最近开始研究一些Linux方面的代码才发现自己是多么的很傻很天真。在Linux中还存在这一种叫做条件变量的东西。必须承认我在理解这个概念上花了很多时间，查阅了很多资料。这里主要分析如下几个问题：1. 条件变量是什么；2.为什...]]></description><category></category></item><item><title><![CDATA[ENVI 5.x 目录结构以及文件结构]]></title><link>https://blog.youkuaiyun.com/Replus_/article/details/82391510</link><guid>https://blog.youkuaiyun.com/Replus_/article/details/82391510</guid><author>Replus_</author><pubDate>Tue, 04 Sep 2018 22:24:06 +0800</pubDate><description><![CDATA[目录结构：

Bin :相应的ENVI运行目录。Classic : ENVI经典模式安装路径。custom code :自定义代码。对envi做功能扩展的时候，比如想将自己在IDL写的函数运用到ENVI的图像处理中，就需要将函数的源码编译后放入该文件夹即可。

data : ENVI自带数据目录。ENVILiDAR54 : ENVI激光雷达处理工具安装目录

Examples : ENVI二次扩展...]]></description><category></category></item><item><title><![CDATA[图像处理：如何理解傅里叶变换在图像处理中的应用]]></title><link>https://blog.youkuaiyun.com/Replus_/article/details/81945495</link><guid>https://blog.youkuaiyun.com/Replus_/article/details/81945495</guid><author>Replus_</author><pubDate>Wed, 22 Aug 2018 15:49:09 +0800</pubDate><description><![CDATA[声明：       

       这篇文章的主要目的是通过建立一维傅里叶变换与图像傅里叶变换中相关概念的对应关系来帮助读者理解图像处理中的离散傅里叶变换，因此，理解图像中离散傅里叶变换的前提条件是读者需要了解一维傅里叶变换的基本知识，详情可参考：https://zhuanlan.zhihu.com/p/19763358

基本数学概念的对应关系：

       一维傅里叶变换的作用对象是信号...]]></description><category></category></item><item><title><![CDATA[图像分割：分水岭算法的直观理解以及一个应用的小技巧]]></title><link>https://blog.youkuaiyun.com/Replus_/article/details/81842759</link><guid>https://blog.youkuaiyun.com/Replus_/article/details/81842759</guid><author>Replus_</author><pubDate>Sun, 19 Aug 2018 22:11:59 +0800</pubDate><description><![CDATA[建议先看下这篇博文：https://www.cnblogs.com/mikewolf2002/p/3304118.html

分水岭算法的直观表现（红色区域为marker）：



分水岭算法的运算过程可以理解成4个环节：

（1）根据marker灰度值的不同，从小到大的对marker赋予编号（灰度值最小编号为1，最大的编号为n）；

（2）由编号1的marker最先开始，依次对各个盆地进行淹没（...]]></description><category></category></item><item><title><![CDATA[python爬虫：使用selenium、unittest和BeautifulSoup爬取斗鱼tv的当前直播人数]]></title><link>https://blog.youkuaiyun.com/Replus_/article/details/80590460</link><guid>https://blog.youkuaiyun.com/Replus_/article/details/80590460</guid><author>Replus_</author><pubDate>Wed, 06 Jun 2018 09:43:21 +0800</pubDate><description><![CDATA[import unittest
from selenium import webdriver
from bs4 import BeautifulSoup as bs


class douyu(unittest.TestCase):
    def setUp(self):
        self.driver = webdriver.PhantomJS()
        # 用于统计当前直播...]]></description><category></category></item><item><title><![CDATA[python爬虫：无视https的CA安全认证]]></title><link>https://blog.youkuaiyun.com/Replus_/article/details/80494688</link><guid>https://blog.youkuaiyun.com/Replus_/article/details/80494688</guid><author>Replus_</author><pubDate>Tue, 29 May 2018 12:24:17 +0800</pubDate><description><![CDATA[import urllib.request
import ssl

context = ssl._create_unverified_context()

url = 'https://www.12306.cn/mormhweb/'

request = urllib.request.Request(url)
response = urllib.request.urlopen(url = requ...]]></description><category></category></item><item><title><![CDATA[Scrapy实践：爬取腾讯社会招聘信息（文字爬取）]]></title><link>https://blog.youkuaiyun.com/Replus_/article/details/80474184</link><guid>https://blog.youkuaiyun.com/Replus_/article/details/80474184</guid><author>Replus_</author><pubDate>Sun, 27 May 2018 23:26:21 +0800</pubDate><description><![CDATA[注：爬取后的信息将以json格式存储，并将文件命名为“recruit.json”可用Notepad++打开。代码实现：items.py# -*- coding: utf-8 -*-

import scrapy


class TxhrItem(scrapy.Item):
    #职位名称
    positionName = scrapy.Field()
    #职位类别
    posit...]]></description><category></category></item><item><title><![CDATA[Scrapy实践：爬取斗鱼TV主播的头像（重写ImagesPipeline实现图片爬取）]]></title><link>https://blog.youkuaiyun.com/Replus_/article/details/80473927</link><guid>https://blog.youkuaiyun.com/Replus_/article/details/80473927</guid><author>Replus_</author><pubDate>Sun, 27 May 2018 23:14:02 +0800</pubDate><description><![CDATA[注：若运行以下代码报出有关“PIL”的错误，则只需安装pillow即可。实现思路：（1）使用Fiddler抓包工具，找出为斗鱼APP颜值区提供数据的URL（Json格式）（2）在items中定义需要记录的相关信息（3）在spider中实现迭代爬取各主播的信息（4）在Pipeline中通过继承内置的ImagesPipeline类，重写其功能，实现图片的下载 （5）在配置文件中进行相关配置代码实现：i...]]></description><category></category></item><item><title><![CDATA[关于python中嵌套导入模块的问题成因及解决方案]]></title><link>https://blog.youkuaiyun.com/Replus_/article/details/80273067</link><guid>https://blog.youkuaiyun.com/Replus_/article/details/80273067</guid><author>Replus_</author><pubDate>Thu, 10 May 2018 20:48:31 +0800</pubDate><description><![CDATA[在以下代码中，无论执行a.py还是b.py，都会报错。# a.py
from b import y
def x():
    print('x')

# b.py
from a import x
def y():
    print('y')

#在a.py中运行，产生的报错内容如下
Traceback (most recent call last):
  File &quot;D:\python\a.py...]]></description><category></category></item><item><title><![CDATA[在使用ArcMap中的核密度分析时“输出像元大小”出现异常数的解决方案]]></title><link>https://blog.youkuaiyun.com/Replus_/article/details/80139056</link><guid>https://blog.youkuaiyun.com/Replus_/article/details/80139056</guid><author>Replus_</author><pubDate>Sat, 28 Apr 2018 20:39:41 +0800</pubDate><description><![CDATA[我在制作热力图时，就遇到了如下图所示的问题。而这个问题是因为核密度分析的输入数据采用的是地理坐标系所导致的。（核密度分析的输入数据要求采用投影坐标系）当我将输入数据转换为投影坐标系时，这个问题就迎刃而解了。...]]></description><category></category></item></channel></rss>