线程

读书笔记之多线程——System.Thread.Timer

时间秒杀一切 提交于 2020-03-18 21:55:06
--居然工作很久都没有用过System.Thread.Timer。下面是在MSDN上的一些学习笔记。 首选是构造函数 : Timer(TimerCallback) //使用新创建的 Timer 对象作为状态对象,用一个无限周期和一个无限到期时间初始化 Timer 类的新实例。 Timer(TimerCallback, Object, Int32, Int32) //使用 32 位的有符号整数指定时间间隔,初始化 Timer 类的新实例。 Timer(TimerCallback, Object, Int64, Int64) //用 64 位有符号整数来度量时间间隔,以初始化 Timer 类的新实例。 Timer(TimerCallback, Object, TimeSpan, TimeSpan)//初始化 Timer 类的新实例,使用 TimeSpan 值来度量时间间隔。 Timer(TimerCallback, Object, UInt32, UInt32) //用 32 位无符号整数来度量时间间隔,以初始化 Timer 类的新实例。 备注: 使用 TimerCallback 委托指定希望 Timer 执行的方法。计时器委托在构造计时器时指定,并且不能更改。 此方法不在创建计时器的线程上执行,而是在系统提供的 ThreadPool 线程上执行。 创建计时器时

转:Mysql使用主从复制机制(replication)

笑着哭i 提交于 2020-03-18 19:48:39
内容转自:http://blog.sina.com.cn/s/blog_4e424e2101000c1z.html;http://blog.sina.com.cn/s/blog_4e424e2101000c20.html MySQL支持单向、异步复制,复制过程中一个服务器充当主服务器,而一个或多个其它服务器充当从服务器。主服务器将 更新写入二进制日志文件,并维护日志文件的一个索引以跟踪日志循环。当一个从服务器连接到主服务器时,它通知主服务器从服务器在日志中读取的最后一次成功更新的位置。从服务器接收从那时起发生的任何更新,然后封锁并等待主服务器通知 下一次更新。 为什么使用主从复制? 1、主服务器/从服务器设置增加了健壮性。主服务器出现问题时,你可以切换到从服务器进行恢复。 2、通过在主服务器和从服务器之间切分处理客户查询的负荷,可以得到更好的客户响应时间。但是不要同时在主从服务器上进行更新,这样可能引起冲突。 3、使用复制的另一个好处是可以使用一个从服务器执行备份,而不会干扰主服务器。在备份过程中主服务器可以继续处理更新。 主从复制的原理: MySQL使用3个线程来执行复制功能(其中1个在主服务器上,另2个在从服务器上)。 第1个线程:当发出START SLAVE时,从服务器创建一个I/O线程,以连接主服务器并让主服务器发送二进制日志。 第2个线程:

线程

北城以北 提交于 2020-03-18 19:06:08
线程(Thread)概念   1.线程是可有CPU直接运行的实体。   2.在一个进程内可以创建多个线程   3.多个线程可以共享CPU实现并发 实现线程:   Create'Thread()//把函数创建为线程   HANDLE CreateThread(       LPSECURITY_ATTRIBUTES ipThreadAttributes,       DWORD dwStackSize,       LPTHREAD_ROUTINE ThreadFunction,//线程函数 *大多数时候只需要这个就够了       LPVOID lpParameter//线程函数的参数 )   线程函数的原型:   DWORD ThreadFunction(     LPVOID lpParameter //参数)   常规使用模型:CreateThread(0,0,函数,0) 分类:   单线程程序和多线程程序:     单线程:整个进程只有一个线程,Windows程序缺省只有一个线程(主,线程,main)     多线程:主线程和至少一个用户线程 来源: https://www.cnblogs.com/beautiful7/p/12519308.html

Mysql数据库主从复制搭建

為{幸葍}努か 提交于 2020-03-18 18:56:28
Mysql数据库主从复制原理: 主库开启bin-log日志,同时生成IO线程。IO线程负责将用户写入数据库的sql语句记录在二进制日志bin-log,该记录过程可并发进行;生成标识号 server id ;创建主从复制账号。   从库不需要开启bin-log日志,开启主从复制后,从库将产生一个IO线程,从库IO线程监控主库bin-log日志,当bin-log 日志发生变化时,从IO线程将会通过3306端口向主IO线程申请验证,进行数据交换,具体验证信息:1 主库IP和端口号、2 主库的复制账号和密码、3 所要复制的bin-log日志的文件名、4 文件中position具体位置。验证通过后主IO线程将对应的内容复制给从IO线程,该过程可以并发进行。此时从库文件master.info 记录了验证信息和完成数据交换的bin-log日志文件及文件中的位置信息。从库IO线程将内容放在从库中继日志relay-log中。SQL线程启动,查看relay-log ,将其中更新的二进制语句编译解析成sql语句,存储在从库的mysql data 目录中,并在relay-log.info文件中记录sql进程解析relay-log的文件名及位置信息,完成主从复制。 主从备份搭建 试验环境:master: 1922.168.200.151 slave : 192.168.200.129 一、 建立时间同步环境

5.线程的八大核心基础知识之Thread和Object类中的重要方法详解

那年仲夏 提交于 2020-03-18 18:14:17
一.概述 二.方法概览 三.wait,notify,notifyAll方法详解 1.作用和用法:阻塞阶段、唤醒阶段、遇到中断 wait作用是释放锁,当前线程进入等待, notify和notifyAll作用是通知等待线程可以执行 wait,notify,notifyAll都必须放到同步代码块中 (1)wait和notify基本用法展示: 首先thread1线程拿到object对象锁住object后执行进入到wait方法后释放了锁,进入了等待状态 然后thread2线程拿到object对象锁住object后执行notify通知等待的线程可以运行了,然后继续执行run方法到结束 最后thread1拿到锁继续执行run方法到结束 /** * 展示wait和notify的基本用法:1.研究代码执行顺序 2.证明wait释放锁 */ public class Wait { public static Object object = new Object(); static class Thread1 extends Thread{ @Override public void run() { synchronized (object){ System.out.println(Thread.currentThread().getName() + "开始执行了"); try { object

netty总结

拥有回忆 提交于 2020-03-18 17:27:31
3 月,跳不动了?>>> 一、Netty 1. Netty的线程模型 netty通过Reactor模型基于多路复用器接收并处理用户请求,这个Reactor模型分为三种: 第一种是Reactor单线程模型,它是使用一个线程来处理客户端的连接和IO处理 第二种是Reactor多线程模型,他使用一个Acceptor线程来处理客户端的连接,并使用线程池来处理Handler的IO操作 第三种是Reactor主从多线程模型,这种模型的Acceptor和Handler处理都是线程池 Netty使用的是第二种模型,即使你这样写:(boosGroup表示Acceptor) EventLoopGroup bossGroup = new NioEventLoopGroup(4); 但是由于服务器端的 ServerSocketChannel 只绑定到了 bossGroup 中的一个线程, 因此在调用 Java NIO 的 Selector.select 处理客户端的连接请求时, 实际上是在一个线程中的, 所以对只有一个服务的应用来说, bossGroup 设置多个线程是没有什么作用的, 反而还会造成资源浪费. 来源: oschina 链接: https://my.oschina.net/garlicts/blog/3197556

多线程 -- CAS自旋锁、Atomic类

廉价感情. 提交于 2020-03-18 17:01:03
1、CAS(compare and swap) CAS 概念: CAS是一种系统原语,能够原子地完成比较和交换两个动作(所谓原语属于操作系统用语范畴。原语由若干条指令组成的,用于完成一定功能的一个过程。primitive or atomic action 是由若干个机器指令构成的完成某种特定功能的一段程序,具有不可分割性·即原语的执行必须是连续的,在执行过程中不允许被中断)。CAS是Compare And Set的缩写。CAS有3个操作数,内存值V,旧的预期值E,要修改的新值N。当且仅当预期值E和内存值V相同时,将内存值V修改为B,否则什么都不做。 CAS 执行流程图: 2、自旋锁 (spinlock) 前言: 在介绍自旋锁之前,需要提到关键字 Volatile,它可以保证 JMM 模型所规定的可见性+有序性,但是它却不能保证原子性,即如果用它是不能保证对修饰变量操作的原子性的。因此不能用它来作为锁,但是它配合上 CAS 就可以构造出一种“无锁策略”的乐观自旋锁,保证了操作的原子性,而且在适合其应用的场景下效率是比较高的,因为它的优点就是可以避免线程的上下文切换所带来的系统开销。 概念: 是指当一个线程在获取锁的时候,如果锁已经被其它线程获取,那么该线程将循环等待,然后不断的判断锁是否能够被成功获取,直到获取到锁才会退出循环。 自旋锁缺点: 1)如果某个线程持有锁的时间过长

Redis 单线程模型介绍

末鹿安然 提交于 2020-03-18 16:18:07
1. 理解单线程模型 redis 会将每个客户端都关联一个指令队列。客户端的指令通过队列来按顺序处理,先到先服务。 在一个客户端的指令队列中的指令是顺序执行的,但是多个指令队列中的指令是无法保证顺序的,例如执行完 client-0 的队列中的 command-0 后,接下去是执行哪个队列中的第一个指令是无法确定的,但是肯定不会同时执行两个指令。 redis 同样也会为每个客户端关联一个响应队列,通过响应队列来顺序地将指令的返回结果回复给客户端。 同样,一个响应队列中的消息可以顺序的回复给客户端,多个响应队列之间是无法保证顺序的。 所有的客户端的队列中的指令或者响应,redis 每次都只能处理一个,同一时间绝对不会处理超过一个指令或者响应。 2. 为什么redis使用单线程模型还能保证高性能? (1) 纯内存访问 redis 将所有数据放在内存中,内存的响应时长大约为 100 纳秒,这是 redis 的 QPS 过万的重要基础。 (2) 非阻塞式IO 什么是阻塞式 IO 当我们调用 Scoket 的读写方法,默认它们是阻塞的。 read() 方法要传递进去一个参数 n,表示读取这么多字节后再返回,如果没有读够 n 字节线程就会阻塞,直到新的数据到来或者连接关闭了, read 方法才可以返回,线程才能继续处理。 write() 方法会首先把数据写到系统内核为 Scoket

mysql-proxy实现读写分离

江枫思渺然 提交于 2020-03-18 14:23:40
其中Amoeba for MySQL也是实现读写分离 环境描述: 操作系统:CentOS6.5 32位 主服务器Master:192.168.179.146 从服务器Slave:192.168.179.147 调度服务器MySQL-Proxy:192.168.179.142 由于电脑配置不行,安装了三台虚拟机,就卡死了,只能将就一下,由于是一主 一从,所以,导致读写都在master上,有机会,再弄两台slave来测试 一.mysql主从复制,参考:http://www.cnblogs.com/lin3615/p/5679828.html 二、mysql-proxy实现读写分离 1、安装mysql-proxy 实现读写分离是有lua脚本实现的,现在mysql-proxy里面已经集成,无需再安装 下载:http://dev.mysql.com/downloads/mysql-proxy/ 一定要下载对应的版本 tar zxvf mysql-proxy-0.8.5-linux-glibc2.3-x86-32bit.tar.gz mv mysql-proxy-0.8.5-linux-glibc2.3-x86-32bit /usr/local/mysql-proxy 2、配置mysql-proxy,创建主配置文件 cd /usr/local/mysql-proxy mkdir lua

mysql proxy 读写分离

限于喜欢 提交于 2020-03-18 14:23:26
环境描述: 操作系统:CentOS6.5 32位 主服务器Master:192.168.179.146 从服务器Slave:192.168.179.147 调度服务器MySQL-Proxy:192.168.179.142 由于电脑配置不行,安装了三台虚拟机,就卡死了,只能将就一下,由于是一主 一从,所以,导致读写都在master上,有机会,再弄两台slave来测试 一.mysql主从复制,参考:http://www.cnblogs.com/lin3615/p/5679828.html 二、mysql-proxy实现读写分离 1、安装mysql-proxy 实现读写分离是有lua脚本实现的,现在mysql-proxy里面已经集成,无需再安装 下载:http://dev.mysql.com/downloads/mysql-proxy/ 一定要下载对应的版本 tar zxvf mysql-proxy-0.8.5-linux-glibc2.3-x86-32bit.tar.gz mv mysql-proxy-0.8.5-linux-glibc2.3-x86-32bit /usr/local/mysql-proxy 2、配置mysql-proxy,创建主配置文件 cd /usr/local/mysql-proxy mkdir lua #创建脚本存放目录 mkdir logs #创建日志目录