项目中某个定时任务执行过程中出现死锁问题,具体错误如下:
1 | Error 1213: Deadlock found when trying to get lock; try restarting transaction |
分析
检查一下表引擎 & 事务隔离级别
1 | mysql> show variables like '%storage_engine%'; |
项目中某个定时任务执行过程中出现死锁问题,具体错误如下:
1 | Error 1213: Deadlock found when trying to get lock; try restarting transaction |
检查一下表引擎 & 事务隔离级别
1 | mysql> show variables like '%storage_engine%'; |
有时候git项目比较大,git clone会因为各种原因中断,但是Git并不会断点续“传”再次clone又是重新来过,类似这种问题…让人很是苦恼
1 | $ error: RPC failed; HTTP 504 curl 22 The requested URL returned error: 504 Gateway Time-out |
git配置流
1 | $ git config --global http.lowSpeedLimit 0 // 最小速度 |
分块拉取
1 | $ git clone --depth=1 {repo} // 拉取最新的代码(最后一次commit) |
但这样会带来其他的小问题,就是拉下来的代码默认分支既不是master也不是其他分支 … 需要拉取完整的项目
1 | $ git fetch --unshallow // 拉取深层代码 |
Laravel框架中控制反转和依赖注入功能是怎么实现的?
其实控制反转和依赖注入是一种设计思想,它最早源于Java Spring框架设计中的机制,所以身边如果有做Java开发的小伙伴~简单聊聊就能明白许多。
依赖注入(Dependency Injection),通俗的解释是当我们构建对象时需要的参数,只要不是手动创建而是以实例对象的形式注入都可以称为依赖注入。
举个例子,一个小游戏中玩家可以创建不同的职业。
1 | // 职业接口 |
之前简单了解过Mysql的索引,今天来学习一下Mysql(InnoDB)的聚簇索引以及SQL为什么会产生回表查询?
都知道Mysql存储的数据结构是B+Tree,所以当查询数据的时候能最快找到叶子节点的检索方式时是最快的。比如:主键直接定位行记录,而有些查询需要先检索索引树找到叶子节点的主键值,再通过主键值定位行记录这种扫描2次索引树的方式就叫做回表查询。
如何确定SQL语句会不会造成回表查询?如下表:
1 | CREATE TABLE `users` ( |
2种查询方式:
在现在大数据、高并发,到处都充斥着流量的互联网时代,能不能应对高并发俨然已经发展成一个衡量服务端架构是否合格的标准,作为程序媛我们思考如何利用语言在代码层面最优设计能应对并发的程序去并行处理任务。在程序中对于任务并行处理一般趋于使用:进程、线程,以及另外一种:协程
。支持协程的语言有很多,比如:C/C++、Ruby、 Python(2.5+)、Golang等等,它们有些是本身语言支持协程,有些则是需要引入第三方包来使用。不过,我们主要来学习一下Golang这门语言(简称Go),它是如何理解以及实现协程的。
都知道一台计算机的核心是CPU,它承担着所有的运算。而计算机承载的操作系统(内核)则是负责所有任务的处理和调度CPU以及资源的分配。如果用人类来比喻,大脑是CPU,思维则是操作系统(内核)。
最早的计算机每次只能运行一个程序,如果还有其他程序需要执行则要排队等待。后来CPU运算能力提高了,这种方式过于原始有些浪费性能,于是尝试让多个程序可以并行执行,但是这样面临一个新的问题:跑在同一个CPU中的程序都会使用计算机资源,那程序的运行状态和数据怎么保障?进程
。
1 | 进程是内核资源管理分配的最小单位,每个进程都有独立的虚拟地址空间。内核中的每个程序都运行在独立进程的上下文中,上下文是由程序正常运行需要的一系列参数组成,参数包括存储器中的代码和数据,寄存器中的内容以及进程打开的文件描述符(文件句柄)等。可以把上下文通俗理解为:`环境`。 |
如果程序在运行过程中需要进行IO操作,IO操作阻塞了程序后面的计算,这时候CPU属于空闲状态,那内核会把CPU切换到其他进程去处理。不过当进程数量变高以后,计算机的大部分资源都被进程切换这个操作消耗掉了。为什么说进程切换操作消耗资源代价比较高?
1 | 所谓进程切换其实就是上下文切换,需要切换新的页表并加载新的虚拟地址空间、切换内核栈以及硬件上下文等。只要发生进程切换操作就得反复进入内核,加载切换一系列状态。 |
为了减少这种开销,线程
应运而生。
1 | 线程是内核调度CPU执行的最小单位,线程是运行在进程上下文的逻辑流,线程是具体执行程序的单位。一个进程至少包含一个主线程(可以拥有多个子线程),但是一个线程只能存在于一个进程中。 |
线程切换相比进程切换开销就小了很多,线程切换只需要把寄存器刷新即可。
后面程序媛们发现线程这样还是有性能瓶颈(IO阻塞),无论是进程还是线程因为涉及到大量的计算机资源,所以都是由内核调度管理。能不能开发一种由代码控制的线程呢?这就是协程
。
tag:
缺失模块。
1、请确保node版本大于6.2
2、在博客根目录(注意不是yilia根目录)执行以下命令:
npm i hexo-generator-json-content --save
3、在根目录_config.yml里添加配置:
jsonContent: meta: false pages: false posts: title: true date: true path: true text: false raw: false content: false slug: false updated: false comments: false link: false permalink: false excerpt: false categories: false tags: true