小花花 的个人动态
  • 小花花 发布了文章
    5个月前

    Yii2 中缓存的使用 - 片段缓存

    缓存是提升 Web 应用性能简便有效的方式。 通过将相对静态的数据存储到缓存并在收到请求时取回缓存, 应用程序便节省了每次重新生成这些数据所需的时间。缓存可以应用在 Web 应用程序的任何层级任何位置
  • 小花花 发布了文章
    5个月前

    Yii2 中缓存的使用 - 数据缓存

    缓存是提升 Web 应用性能简便有效的方式。 通过将相对静态的数据存储到缓存并在收到请求时取回缓存, 应用程序便节省了每次重新生成这些数据所需的时间。缓存可以应用在 Web 应用程序的任何层级任何位置
  • 小花花 发布了文章
    5个月前

    Node学习 - 内置 HTTP 模块

    Node 开发的目的就是为了用 JavaScript 编写 Web 服务器程序。因为 JavaScript 实际上已经统治了浏览器端的脚本,其优势就是有世界上数量最多的前端开发人员。HTTP 协议要理
  • 小花花 发布了文章
    5个月前

    Node学习 - 内置 Stream 流 模块

    stream 是 Node 提供的又一个仅在服务端可用的模块,目的是支持 "流" 这种数据结构。 什么是流?流是一种抽象的数据结构。想象水流,当在水管中流动时,就可以从某
  • 小花花 发布了文章
    5个月前

    Node学习 - 内置 fs 模块

    简介:Node 内置的 fs 模块就是文件系统模块,负责文件读写。和所有其它 JavaScript 模块不同的是,fs模块同时提供了异步和同步的方法。回顾一下什么是异步方法。因为 JavaScript
  • 小花花 发布了文章
    5个月前

    Node学习 - 内置基本模块

    简介:Node 是运行在服务端的 JavaScript 环境,服务器程序最大特点是没有浏览器的安全限制了, 而且,服务器程序必须能 接收网络请求,读写文件,处理二进制内容, 所以,Node 内置的常用
  • 小花花 发布了文章
    5个月前

    Node学习 - 使用 pm2 管理项目

    pm2 简介pm2 是一个内置负载均衡的 node.js 应用进程管理器(也支持 Windows)。 简单易用、后台运行、快速部署,常用的命令就几个 可轻松集群模式启动 可以无宕机重载应用程序,保持不
  • 小花花 发布了文章
    5个月前

    Node学习 - 定时任务Cron

    定时任务简介:在实际开发项目中,会遇到很多定时任务的工作。比如: 定时导出某些数据 定时发送消息或邮件给用户 定时备份什么类型的文件一般可以写个定时器,来完成相应的需求,在 Node 中自己实现也非常
  • 小花花 发布了文章
    5个月前

    Node学习 - 与 MongoDB 交互

    MongoDB 简介: 开源、高性能的文档型 NoSQL 数据库; 支持索引、集群、复制和故障转移、各种语言的驱动程序; 高伸缩性 mac 下启动 MongoDB:mongod --conf
  • 小花花 发布了文章
    5个月前

    Node学习 - 与 Redis 交互

    与 Redis 交互Redis 简介: 开源高性能 key-value 存储,采用内存中(in-memory)数据集的方式,也可以采用磁盘存储方式(前者性能高,但数据可能丢失,后者正好相反) 支
  • 小花花 发布了文章
    5个月前

    Node学习 - 与 MySQL 交互

    与 MySQL 交互安装 Node 与 MySQL 交互操作库:npm i mysql --save 使用:const mysql = require('mysql');const conn
  • 小花花 发布了文章
    5个月前

    Node学习 - 模块modules

    模块 通过 Node.js 的官方 API 可以看到 Node.js 本身提供了很多核心模块,这些核心模块被编译成二进制文件,可以 require('模块名') 去获取; 核心模
  • 小花花 发布了文章
    5个月前

    Node学习 - 事件events

    事件模块 events events 是 node.js 最重要的模块,events模块只提供了一个对象 events.EventEmitter,EventEmitter 的核心是事件发射与事件监听
  • 小花花 回答了问题
    6个月前

    数据库的主键应该选择什么数据类型比较好?

    主键的话我的建议是自增整形,不要使用与业务相关的名字,仅用 id 即可,而效率问题都可以用索引来解决。

    因为主键的不可变的特性,如果选择不慎,会在未来产生难以预期的问题。

    比如你用 int 型做文章的 id,但是如果在未来某一天文章数超过了无符号整形的最大值,你将没法将主键修改成 bigint。或者为了给用户起一个唯一 id 用了自增主键,但是如果未来有其他的项目用户要合并进来,他也是这么做的。这时候为了区分不同的项目可能要在这个用户 id 前加一个前缀,这时候也没法修改主键的值。主键之所以叫做主键就是到什么时候都不能改,所以最好的方案就是使用自增数字 id 做主键,并且不要给这个主键赋予一个业务相关的意义。

  • 小花花 发布了文章
    6个月前

    node.js单线程支撑高并发原理(node异步I/O)

    一、node单线程实现高并发原理  众所周知nodejs是单线程且支持高并发的脚本语言。可为什么 单线程 的 nodejs 可以支持 高并发 呢?很多人都不明白其原理,下面我来谈谈
  • 小花花 回答了问题
    6个月前

    对CPU密集型计算和IO密集型运算,应该选择多进程还是多线程?

    Python,特指 CPython 的实现,由于 GIL 的存在,CPython 不能有效的利用多核处理器。表现为任意时间一个进程只有一个线程在跑,而 IO 密集型运算,多数是在 IO 读写将线程堵塞掉了,这个时候线程切换是很合理的,反正线程只是单纯地等待,在这个等待的时候去做其他的事情,资源利用率就上去了。

    简单点解释就是,python 的多线程只能使用一个 cpu 核心。io 密集型应用,本来 cpu 占用率就很低,单个 cpu 核心就够了。用多进程给它多几个核心也不能提升性能。其实从这个特点来看,python多线程这个限制和协程有点像,应用也很像,都是适合io密集型。
    cpu密集型的,显然只用一个 cpu 核心是不行的。

    注意这只是 python,跟其他语言里面的多线程可不是一个概念。

  • 小花花 回答了问题
    6个月前

    单核cpu跑多线程程序,线程锁有没有意义?

    很有必要

    举个例子,假设有两个人需要吃饭,但我们只有一个饭碗(共享的资源),这是前提

    由于 CPU 时间片关系,它会在多个不同的线程之间来回切换,无论单核多核与否,都有可能发生以下情况

    其中 A 吃饭吃到一半的时候(即线程工作做到一半时),CPU 将时间片分给其他线程(即在A还没有吃完饭的情况下,就不让他吃了)

    这时候,CPU 将时间片分配给 B,由于只有一个碗,故 B 也只有使用这个碗(共享的资源)

    待 CPU 再次将时间片分给 A 的时候,他就不知道该如何开始了,因为 B 也使用过这个碗(并且他有可能把饭吃完了,碗空了)。如果碗是空的,那么 A 就会以为自己吃完了(线程以为自己做完了工作),其实并没有。

    这时候,就造成了数据的错误

     

    如果加了锁,就不一样了,当 B 想使用碗的时候,发现碗已经被 A 占用了(加了锁),这个时候 B 就只有等待,待 A 用完(完成了工作,不在使用共享的资源)之后,B就可以使用了

    之所以要加锁,在于
    1. 时间片的大小不定。比如单个时间片只能完成给定任务的一半,剩下的那一半就只有等下一个时间片了。而在等待的过程中,如果不加锁,就没法保证其他线程不使用我们的资源,数据就有可能出错
    2. 给线程分配时间片的时机不确定。比如有a,b,c 三个线程,a,c使用了共享的资源。如果前几十个时间片都集中在a,b上,那么很有可能时间片分配给c的时候,a已经完成了工作,因此它也不需要和c争夺资源了。

    分配的时机很大程度由线程的优先级来决定,在前面的例子中,如果a,c优先级比 b 高很多,那么时间片可能大多都分配在a,c上,这个时候a,c就要疯狂的争夺资源了

最近访客
  • xiaocai
    xia 1个月前
  • 董俊俊
    董俊俊 3个月前
  • shadowhung
    sha 5个月前