work

Linux线程池

流过昼夜 提交于 2019-12-13 11:25:53
大多数的网络服务器,包括Web服务器都具有一个特点,就是单位时间内必须处理数目巨大的连接请求,但是处理时间却是比较短的。在传统的多线程服务器模型中是这样实现的:一旦有个请求到达,就创建一个新的线程,由该线程执行任务,任务执行完毕之后,线程就退出。这就是"即时创建,即时销毁"的策略。尽管与创建进程相比,创建线程的时间已经大大的缩短,但是如果提交给线程的任务是执行时间较短,而且执行次数非常频繁,那么服务器就将处于一个不停的创建线程和销毁线程的状态。这笔开销是不可忽略的,尤其是线程执行的时间非常非常短的情况。   线程池就是为了解决上述问题的,它的实现原理是这样的:在应用程序启动之后,就马上创建一定数量的线程,放入空闲的队列中。这些线程都是处于阻塞状态,这些线程只占一点内存,不占用CPU。当任务到来后,线程池将选择一个空闲的线程,将任务传入此线程中运行。当所有的线程都处在处理任务的时候,线程池将自动创建一定的数量的新线程,用于处理更多的任务。执行任务完成之后线程并不退出,而是继续在线程池中等待下一次任务。当大部分线程处于阻塞状态时,线程池将自动销毁一部分的线程,回收系统资源。   下面是一个简单线程池的实现,这个线程池的代码是我参考网上的一个例子实现的,由于找不到出处了,就没办法注明参考自哪里了。它的方案是这样的:程序启动之前,初始化线程池,启动线程池中的线程,由于还没有任务到来

ModernPhp笔记(1)

痞子三分冷 提交于 2019-12-12 22:31:41
  1.命名空间-namespace    作用:区别不通文件中的相同类名。    例子:有两个文件,ClassA.php,ClassB.php。两个文件中都有一叫做work的类。将两个文件引入之后想要实例化ClassA.php中的work 1 //---------------ClassA.php---------------// 2 <?php 3 namespace ClassA; 4 class work { 5 public function __construct() { 6 echo 'this is class A'; 7 } 8 } 9 10 11 //---------------ClassB.php---------------// 12 <?php 13 namespace ClassB; 14 class work { 15 public function __construct() { 16 echo 'this is class B'; 17 } 18 } 19 20 //---------------Run.php---------------// 21 <?php 22 require 'ClassA.php'; 23 require 'ClassB.php'; 24 25 new \ClassA\work();      2.命名空间-use  

why keylistener doesn't work java

独自空忆成欢 提交于 2019-12-12 10:37:54
The problem is, most likely, the applet doesn't have keyboard focus. This is a common issue with KeyListener. While you have set the applet as being focusable, it doesn't mean that the applet has keyboard focus. You could try using requestFocusInWindow , but this may not work as expected in applets. You could also add a MouseListener to the applet, so that when the user clicks on the applet, you would requestFocusInWindow to ensure that the applet has keyboard focus I would recommend, instead, if you have to develop an applet, you try using JApplet . Instead of painting directly to the applet

Android进阶AIDL使用自定义类型

和自甴很熟 提交于 2019-12-12 01:10:24
原文首发于微信公众号:jzman-blog 上篇文章 中主要介绍从 AIDL 的使用方式以及 Android 开发中不同进程之间的通信,遗留的问题是如何在 AIDL 中使用自定义类型,具体步骤如下: 创建自定义类型 声明自定义类型 定义与自定义类型相关的业务 重写业务实体类 远程调用 验证 AIDL 1. 创建自定义类型 自定义类型传输的就是一个实体对象,这个实体类必须实现 Parcelable 接口,具体如下: // 自定义类型 public class Work implements Parcelable { private String title; private String content; // getter、setter、Parcelable 省略 } 2. 声明自定义类型 创建一个 .aidl 文件声明刚才定义的类型,注意与具体业务 .aidl 文件的不同,声明具体如下: // 在.aidl文件中声明自定义类型 package com.manu.aidldemo; parcelable Work; 3. 定义与自定义类型相关的业务 在定义具体业务的 .aidl 文件中定义与自定义类型相关的业务,具体如下: // Declare any non-default types here with import statements import com.manu

PostgreSQL 参数调整(性能优化)

怎甘沉沦 提交于 2019-12-11 23:26:55
PostgreSQL 参数调整(性能优化) https://www.cnblogs.com/VicLiu/p/11854730.html 知道一个 shared_pool 文章写的挺好的 还没仔细看 昨天分别在外网和无外网环境下安装PostgreSQL,有外网环境下安装的相当顺利。但是在无外网环境下就是两个不同的概念了,可谓十有八折。感兴趣的同学可以搭建一下。 PostgreSQL安装完成后第一件事便是做相关测试,然后调整参数。 /*CPU 查看CPU型号*/ cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c /*查看物理CPU个数*/ cat /proc/cpuinfo | grep "physical id" | sort -u | wc -l /*查看逻辑CPU个数*/ cat /proc/cpuinfo | grep "processor" | wc -l /*查看CPU内核数*/ cat /proc/cpuinfo | grep "cpu cores" | uniq /*查看单个物理CPU封装的逻辑CPU数量*/ cat /proc/cpuinfo | grep "siblings" | uniq /*计算是否开启超线程 ##逻辑CPU > 物理CPU x CPU核数 #开启超线程 ##逻辑CPU = 物理CPU

MySQL事务,这篇文章就够了

强颜欢笑 提交于 2019-12-11 21:27:53
原文链接: https://blog.ouyangsihai.cn/ >> MySQL事务,这篇文章就够了 在看这篇文章之前,我们回顾一下前面的几篇关于MySQL的系列文章,应该对你读下面的文章有所帮助。 InnoDB与MyISAM等存储引擎对比 面试官问你B树和B+树,就把这篇文章丢给他 MySQL的B+树索引的概念、使用、优化及使用场景 MySQL全文索引最强教程 MySQL的又一神器-锁,MySQL面试必备 0 什么是事务 事务(Transaction) 是并发控制的基本单位。所谓的事务,它是一个操作序列,这些操作要么都 执行,要么都不执行,它是一个不可分割的工作单位。事务是数据库维护数据一致性的单位,在每 个事务结束时,都能保持数据一致性。 同时,事务有着严格的地定义,必须满足四个特性,也就是我们一直说的ACID,但是,并不是说各种数据库就一定会满足四个特性,对于不同的数据库的实现来说,在不同程度上是不一定完全满足要求的,比如,Oracle数据库来说,默认的事务隔离级别是 READ COMMITTED ,是不满足隔离性的要求的。 下面我们趁热打铁,介绍一下事务的必知必会的四大特性,这几个特性也是在面试中,面试官面试MySQL的相关知识的时候,问的比较多的问题,所以,这几个特性务必需要理解并且透彻的记在心里,开个玩笑,被火车撞了,也不应该忘记这四个特性! 1 事务的四大特性

异步IO框架:asyncio 中篇

隐身守侯 提交于 2019-12-11 12:49:49
上一节我们首先介绍了,如何创建一个协程对象. 主要有两种方法 通过 async 关键字, 通过 @asyncio.coroutine 装饰函数。 然后有了协程对象,就需要一个事件循环容器来运行我们的协程。其主要的步骤有如下几点: 将协程对象转为task任务对象 定义一个事件循环对象容器用来存放task 将task任务扔进事件循环对象中并触发 上一节,其实就只是讲了协程中的 单任务,我们就来看下,协程中的 多任务。 协程中的并发 协程的并发,和线程一样。举个例子来说,就好像 一个人同时吃三个馒头,咬了第一个馒头一口,就得等这口咽下去,才能去啃第其他两个馒头。就这样交替换着吃。 asyncio 实现并发,就需要多个协程来完成任务,每当有任务阻塞的时候就await,然后其他协程继续工作。 第一步,当然是创建多个协程的列表。 # 协程函数 async def do_some_work(x): print('Waiting: ', x) await asyncio.sleep(x) return 'Done after {}s'.format(x) # 协程对象 coroutine1 = do_some_work(1) coroutine2 = do_some_work(2) coroutine3 = do_some_work(4) # 将协程转成task,并组成list tasks = [

Linux防火墙|Linux

狂风中的少年 提交于 2019-12-11 07:01:37
文章目录 一、Firewalld概述 1.Firewalld简介 二、Firewalld和iptables的关系 1.什么是iptables 1.1 Firewalld和iptables的区别 2. 四表五链 2.1 具体的四表 2.2 五链 2.3 四表五链之间的关系 3.iptables语法格式 三、Firewalld网络区域 1. 区域介绍 2. Firewalld数据处理流程 四、Firewalld防火墙的配置方法 1. 运行时配置 2. 永久配置 五、Firewall-config图形工具 5.1 /etc/firewalld中的配置文件 5.2 运行时配置/永久配置 5.3 Firewall-cmd命令行工具 5.4 重新加载防火墙 5.5 关联网卡到指定区域 5.6 修改默认区域 5.7 连接状态 ‘区域’选项卡 ‘服务’选项卡 六、Firewalld防火墙维护命令 6.1 防火墙进程操作 6.2 防火墙管理操作 6.3 查询Firewalld状态 6.4 重新加载Firewall的配置 七、查询预定义信息命令 7.1 获取预定义信息 7.2 显示网络连接或接口的默认区域 7.3 设置网络连接或接口的默认区域为internal 7.4 显示已激活的所有区域 八、Firewalld区域操作命令 8.1 显示ens33接口绑定的区域 8.2

Python程序中的线程操作(oncurrent模块)

不羁岁月 提交于 2019-12-11 02:28:33
进程是cpu资源分配的最小单元,一个进程中可以有多个线程。 线程是cpu计算的最小单元。 对于Python来说他的进程和线程和其他语言有差异,是有GIL锁。 GIL锁 GIL锁保证一个进程中同一时刻只有一个线程被cpu调度。 GIL锁,全局解释器锁。用于限制一个进程中同一时刻只有一个线程被cpu调度。 扩展:默认GIL锁在执行100个cpu指令(过期时间)。 查看GIL切换的指令个数 import sys v1 = sys。getcheckinterval() print(v1) 一、通过threading.Thread类创建线程 1、 创建线程的方式:直接使用Thread from threading import Thread import time def sayhi(name): time.sleep(2) print('%s say hello' %name) if __name__ == '__main__': t = Thread(target=sayhi,args=( ' nick ' ,)) t.start() print('主线程') 2、 创建线程的方式:继承Thread from threading import Thread import time class Sayhi(Thread): def __init__(self,name): super().

在php上安装mcrypt、bcmath和openssl扩展(银联业务需要)

大城市里の小女人 提交于 2019-12-10 13:30:10
1、 在php上安装mcrypt扩展 1.1 编译安装libmcrypt # tar zxvf libmcrypt-2.5.8.tar.gz # cd libmcrypt-2.5.8 # ./configure --prefix=/home/work/local/libmcrypt # make && make install 1.2 编译安装mhash(mcrypt依赖mhash) # tar jxvf mhash-0.9.9.9.tar.bz2 # cd mhash-0.9.9.9 # ./configure --prefix=/home/work/local/mhash # make && make install 1.3 编译安装php的mcrypt扩展 # cd <php-src>/ext/mcrypt # /home/work/local/php/bin/phpize # 配置编译环境 export LD_LIBRARY_PATH=/home/work/local/libmcrypt/lib:/home/work/local/mhash/lib export LDFLAGS="-L/home/work/local/mhash/lib/ -I/home/work/local/mhash/include/" export CFLAGS="-I/home/work/local