Hello, World!

~ Enjoy Today ~

进程线程协程的本质区别
现代多任务操作系统通常都会有进程的概念来对任务进行隔离,而为了充分利用多核处理器性能同时又减少进程创建的开销,通常又都会引入更细粒度的调度单元:线程。 我们经常能在教科书上看到对于进程和线程的定义: 进程是操作系统分配资源的最小单位,线程是进行调度的最小单元。 这句话没错,但是只是从职责上给出的定义,而不是基于底层实现出发的。 广义上的线程分为内核态线程和用户态线程两种,内核态线程受操作系统直接调度可以充......
Go语言sync包实现原理分析
Java 语言中有一个 java.util.Concurrent 包提供了大量的并发工,而 Go 语言中也有这样的角色:sync包。 sync.Mutex 锁实现原理 sync.Mutext 是 Go 提供的一种同步原语,用于表达互斥,不过不推荐在业务中使用,根据 Go 的设计思想,应首先考虑通过传递消息(管道)来共享内存,而不是通过共享内存来传递消息 Mutex 结构体如下,只有两个变量,非常简单: type Mutex struct { state int32 // 状态,bitmap sema uint32 // 信号量 } state 字段是一个位图 第 0 位表示是否加锁 第 1 位表示是否已唤醒 第 2 位表示是否为饥饿模......
Go 多路条件语句 Switch 语法详解
Switch 是 Go 语言中一种多路条件语句,一般搭配 case 语句使用。 执行逻辑 一个 switch case 条件结构如下所示: switch simpleStatement; condition { case expression1,expression2: statements case expression3: statements default: statements } 和 if 语句类似,switch 语句也可以在条件语句之前执行一段简短的表达式(可以用于很方便的控制变量的作用域),switch case 开始执行时,会先执行这一个表达式(空也算一种),然后计算出条件语句的值,接着按从上到下,从左到右的顺序一个一个的执行 case 语句的条件表达式,如果值相等的话就会进入执行 case 条件......
MySQL建表选项
这是一个很常见的 SQL 建表语句: CREATE TABLE `people` ( `id` int NOT NULL AUTO_INCREMENT, `name` varchar(40) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 SQL 建表语句结构如下: CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name (create_definition,...) [table_options] 我们对照结构可以看到我们的建表语句最后一部分是表选项,而在这里我们指定了两个选项:引擎和字符集,那么总共都有哪些选项可以设置呢?参照MySQL官方文档,我们一起来看看。 AUTO_INCREMENT MySQL 一张表中可以指定一个字段为 auto increment,这样在当这个字段没有指定值时就在当前表最大值的基础上自增,在插入了自增的一......
在线 Markdown 转 PDF 工具评测
用 Markdown 写了这么久博客,对于这种简约风格还是非常喜欢的,所以在写一些其他文档的时候我也更倾向于这种格式。最近需要写一些 PDF 格式的文档,所以我找了一些在线 Markdown 转 PDF 的网站,不同的网站渲染出来的风格并不一样,我在下面做了一个对比,帮助大家进行选择。 测试数据 # 测试测试 1111111111 / 测试 / 123 Email: test@test.com Test: test Website: https://github.com.cn * * * 123213123 测出测试 真的测试 测试吧 * * * # 二阶段测试 - 真的测试测试 - 真的测试测试/真的测试测试 - 微博:[@Easy](http:......
Java跨平台究竟能跨哪些平台
众所周知,Java跨平台的一直被众多Java程序员们津津乐道,“一次编写,到处运行”的设想着实令人心动,虽然会带来一定性能上的问题,但这并不妨碍大家对Java的喜爱,既然都说Java能跨平台,Java 也并不是凭空就能跑在任何机器上,这是不现实的,需要官方针对对应的平台,编译一套对应平台包括 Java 虚拟机(Java Runtime Environment 简称 JRE)在内的 Java 开发工具集(Java Develop Kit,简称 JDK),这样我们编写的 Java 代码才算......
Go知识点杂记
Go语言的不足 我在使用 Go 语言编程开发时发现的一些问题,记录: 没有泛型,写工具库时很不方便 Go 把错误当成一种函数返回值来处理自有其设计道理,但是一次只能只能处理一个错误则是语法上的不足 编译器不支持尾递归优化,这对于递归代码而言很不友好 strings 库不像 Java 那样直接支持正则 没有三目运算符 官方库提供的锁不支持重入 Go静态链接编译的做法会把二进制包撑的特别大,虽然这带来了较好的可移植性 使用首字母大小写这种隐式的做法来......