用户密码只是安全的一部分,其他信息就不重要了吗?例如,手机号,年龄,性别,订单,支付信息等等... 为什么这些信息不需要加密呢?如果要加密,那就是把 HTTPS 重新实现了一遍。不要搞“局部优化”。
a 标签中都有 remote 属性了?前端发展的太快了。
怎么和 捧哏 逗哏 一样呢
某些前端童鞋非要让 js 做后端的事情... 能把前端做好就谢天谢地了
看你怎么用。把 synchronized 锁包在外面,分布式锁放在里面。synchronized 锁就把大部分请求以很廉价的方式拦下来了,不用请求分布式锁,这个比较“昂贵”(通信开销之类的)。
这些基本的东西,你得会用啊
20W 就分表吗?“卡”的原因有很多,你先找个工具,分析一下,瓶颈出在哪里。
又是从哪里拷贝翻译的?
为什么会翻译为"宝石"?
阶段四:IO 线程回写 Socket 和主线程清空全局队
主线程执行完请求操作后,会把需要返回的结果写入缓冲区。然后,主线程会阻塞等待 IO 线程把这些结果回写到 Socket 中,并返回给客户端。
主线程为啥要阻塞等待 IO 线程呢?为啥不去做其他的事情?主线程要是阻塞等待 IO 线程,为啥不直接自己操作 IO 算了?这样不还是同一时间,只有一个线程在工作吗?
import asyncio
import time
async def say_after(delay, what):
print(f'[%s]: starting %s' % (time.time(), what))
await asyncio.sleep(delay)
print(f'[%s]: ending %s' % (time.time(), what))
async def main():
task1 = asyncio.create_task(
say_after(1, 'hello'))
task2 = asyncio.create_task(
say_after(2, 'world'))
task3 = asyncio.create_task(
say_after(0.5, 'Hai')
)
print(f"started at {time.strftime('%X')}")
# Wait until both tasks are completed (should take
# around 2 seconds.)
await task1
# await task2
print(f"finished at {time.strftime('%X')}")
if __name__ == '__main__':
asyncio.run(main())
started at 11:49:41
[1691380181.884058]: starting hello
[1691380181.884095]: starting world
[1691380181.884105]: starting Hai
[1691380182.385623]: ending Hai
[1691380182.885086]: ending hello
finished at 11:49:42
create_task
会顺序把三个任务放入队列。
await
相当于一把发令枪,trigger 一下,三个任务顺序开始执行。
如果此时,在 await task1
之后,再 sleep
一下,就能看到执行时间最长的那个任务也结束了。
import asyncio
import time
async def say_after(delay, what):
print(f'[%s]: starting %s' % (time.time(), what))
await asyncio.sleep(delay)
print(f'[%s]: ending %s' % (time.time(), what))
async def main():
task1 = asyncio.create_task(
say_after(1, 'hello'))
task2 = asyncio.create_task(
say_after(2, 'world'))
task3 = asyncio.create_task(
say_after(0.5, 'Hai')
)
print(f"started at {time.strftime('%X')}")
# Wait until both tasks are completed (should take
# around 2 seconds.)
await task1
# await task2
await asyncio.sleep(2)
print(f"finished at {time.strftime('%X')}")
if __name__ == '__main__':
asyncio.run(main())
started at 11:56:07
[1691380567.491296]: starting hello
[1691380567.491312]: starting world
[1691380567.491318]: starting Hai
[1691380567.992693]: ending Hai
[1691380568.4926028]: ending hello
[1691380569.492554]: ending world
finished at 11:56:10
应该把这里的 create_task
, await
比作 socket
中的 write
和 flush
操作来理解,或者写日志中的 write
和 flush
操作。