V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  wdhwg001  ›  全部回复第 20 页 / 共 63 页
回复总数  1256
1 ... 16  17  18  19  20  21  22  23  24  25 ... 63  
2020-11-18 02:28:27 +08:00
回复了 wdhwg001 创建的主题 macOS 拿到了 M1 Mac 的可以帮忙测一下 Wine / CrossOver 吗?
@vk42 如果整个 Wine 都跑在 Rosetta 2 里的话,Wine 应用是跑在 Wine 里的,也会被一起翻译执行。
2020-11-18 02:02:59 +08:00
回复了 kloudmuka 创建的主题 Apple M1 mac mini 配什么显示器比较好?
@axbx 可以雷电外接一个 6K 60Hz,然后 HDMI 2.0 外接一个 4K 60Hz
2020-11-18 01:31:31 +08:00
回复了 3dwelcome 创建的主题 Apple AppleM1 的傲娇,市面上没一个能打的游戏芯片,包括 RTX 3090。
实际上按照 Nvidia 的同代 GFlops 与功耗的关系,我们会发现显卡和 CPU 是很不一样的,显卡的性能与功耗几乎是线性的,并且提升一倍性能所需要的 TDP 通常要小于一倍。

那么,将 Apple M1 拓展到 RTX 3090 的性能的话,所需要的功耗只有 120W,而如果按峰值算力 35686 计算,再加上 Rosetta 2 的 65%性能折损,Apple M1 拓展至达到 RTX 3090 的性能也只需要 220W 功耗。

恐怖吗?也没那么恐怖,因为每次制程提升,同样的 die 里就能放入原先两倍的晶体管,如 7 * 7=49,5 * 5=25,后者是前者的两倍。

我们以 GTX 1000 系的 14nm 为例,理论上来说,Apple M1 应该比它提升 8 倍能耗,但那就接近 320 了,Apple M1 没有那么强。

但是最近大家都乱标制程,所以这个计算不准确。我们再以 GTX 2000 系 12nm 为例,理论上来说,Apple M1 应该比它提升 6 倍能耗,即 240-280 是合理数值,Apple M1 抵达了这个目标。

拉胯的反而是 3000 系,在制程提升后,它预期要比 2000 系提升 2.5 - 3 倍能耗的,但却只提升了两倍,而 7nm 到 5nm 又是 *2 的提升,所以才显得 Apple M1 的能耗那么离谱。
2020-11-17 23:52:11 +08:00
回复了 MADAOoo 创建的主题 macOS 终于到货了 MacBook Air (M1, 2020)
好奇 Wine 能跑吗?
https://github.com/Gcenx/homebrew-wine
上面写了仅限 Intel,但是没有补充说明为什么不行。
这个版本的 Wine 是带 wine32on64 的,意味着如果它能 Rosetta 2,相当一部分 Windows 需求可以解决。
2020-11-17 19:08:17 +08:00
回复了 qwerty01446 创建的主题 Apple Macbook Air M1 8+256 初步上手体验
好奇 Wine 能跑吗?
https://github.com/Gcenx/homebrew-wine
上面写了仅限 Intel,但是没有补充说明为什么不行。
这个版本的 Wine 是带 wine32on64 的,意味着如果它能 Rosetta 2,相当一部分 Win 需求可以得到解决。
2020-11-16 13:18:59 +08:00
回复了 ttgo 创建的主题 问与答 卖二手有感:人们觉得不砍价就是吃亏
你还不如标 1w6,然后接刀到 1w5,整数以下不接刀
2020-10-18 09:32:28 +08:00
回复了 Trinity888 创建的主题 程序员 ffmpeg 合并 2 个视频文件时 太慢的问题怎么解决?
如果是直接复制流的话应该不会太慢啊,或者用 mkv 做容器?
2020-10-18 09:26:47 +08:00
回复了 xchaoinfo 创建的主题 Python Python 项目部署, uwsgi 还是 gunicorn ? 或者其他选择
作为 ASGI 用户,每次看到 WSGI 们纠结 Windows 就觉得有 Uvicorn 真好,Waitress 到现在连个 SSL 都不支持,Uvicorn 功能已经做到快和 Gunicorn 齐平了。
@catfan 我是说右划的时候看不到上一页的预览的问题。如果点击链接前顶栏是缩回去的,点击后又打开了,那么前后 webview 高度不一致会使得右划无预览。
希望可以滑条调整夜间模式的对比度。

另外一些菜单文字和图标的对比度在夜间模式下不统一。

以及,WebView 有右滑白屏的 Bug,是这样的:当上一页面离开时的 WebView 高度和当前的 WebView 高度不一致的时候,右滑会出现白屏,这里需要单独对这个 WebView 的 Bug 做调整。

还有一些界面交互上可以明显看得出想学 ios,但是却在许多小的地方是反直觉的,比如阅读模式下滑不能关闭,比如一个有 Grip 的设置栏不能上下滑等等。

另外基于私心,我比较希望地址栏编辑时可以左右拖拽滚动,并且拥有语法高亮。
2020-10-16 00:47:13 +08:00
回复了 DeWhite 创建的主题 硬件 感觉大家是不是都不知道 anywhere3 其实已经上市了,双口 typeC。
滚轮不支持倾斜,需要配合侧键组合才能实现横向滚动。
2020-10-09 12:41:09 +08:00
回复了 laike9m 创建的主题 Python 宣传一下 Cyberbrain,真正解放程序员的 Python 调试工具
async 的支持怎么样?
2020-10-07 21:04:29 +08:00
回复了 abersheeran 创建的主题 Python 第一个基于 Radix Tree 进行路由查找的 Python web 框架发布了!
@abersheeran 但是也同样无法解决闭包不可靠的问题啊,你只能规定禁止 scope 深拷贝,并且规定禁止 scope["session"] = {}这样的操作。
2020-10-06 19:25:13 +08:00
回复了 abersheeran 创建的主题 Python 第一个基于 Radix Tree 进行路由查找的 Python web 框架发布了!
@abersheeran 但是你的中间件需要调用内层的 Application,而 send 则是一层一层传递下去,直到最后一层 Application 才调用这个 callable 的,所以你不应该在中间件里直接执行这个 send,而是要把它传递到更深层的 ASGI Application 里:

```python
async def __call__(self, scope, receive, send):
session = {}
scope["session"] = session

await self.app(scope, receive, send)
```

这样一来,你就只能存一个 scope 的闭包:

```python
async def __call__(self, scope, receive, send):
session = {}
scope["session"] = session

async def send_wrapper(message):
# do something to store session
scope["session"]["saved"] = True # 这里的闭包是不可靠的
await send(message) # 但是这里是可靠的

await self.app(scope, receive, send_wrapper)
```

但是就像 ASGI 标准里描述的那样,Scope 是会被下一层 Application 复制的,这就使得内层如果真的复制了 Scope 的话,外层对 Scope 的闭包引用读取到的只会是脏数据。我仔细思考过了,觉得这里如果 ASGI 不做调整,ASGI 的实现也不保存 Application 栈的话(因为像 Django 的 Daphne 一样保存栈是很消耗资源的),这里应该是没有解决方案的。

可如果 ASGI 提供一个单例的上下文的话:


```python
async def __call__(self, scope, receive, send):
session = {}
scope["session"] = session # 把它存到一个请求期间的上下文变量,不一定是 Scope

async def send_wrapper(message, scope): # 这里接收一个请求期间的上下文变量,不一定是 Scope
# do something to store session
scope["session"]["saved"] = True # 这里就不是闭包而是普通地用参数了,所以是可靠的
await send(message) # 这里本来就是可靠的

await self.app(scope, receive, send_wrapper)
```

或者,如果修改 ASGI 的规定,使得 Scope 由一个 immutable 变为一个 mutable single instance 的话,任何一个地方都可以取到一个可靠的 Scope 的引用,也就不会存在复制的问题了。
2020-10-05 23:58:17 +08:00
回复了 abersheeran 创建的主题 Python 第一个基于 Radix Tree 进行路由查找的 Python web 框架发布了!
@abersheeran 我试了一下,结果倒是挺遗憾的,Python 里的正则的性能与捕获组的数量是呈线性关系的,与捕获组之间的包含关系无关。所以,将树展开成正则组的操作应该是仅在树的同级节点的时候可以通过合并获得性能提升,超过同级的情况下就是 Python 的语言性能和正则引擎的执行效率之间的撕逼取舍了。

我个人不倾向于使用换语言的方式实现这个,因为你似乎还没完全榨干 Python 呢。

将上下文传入 receive 和 send 是有意义的,比如不然的话,你怎样使用纯 ASGI 中间件实现一个干净的 Session 呢? Session 的读取发生在__call__期间,而存储和 cookie 的更新则发生在 send 期间,而这之间则需要一个上下文去保存 Session 中的信息吧。
2020-10-05 19:30:33 +08:00
回复了 abersheeran 创建的主题 Python 第一个基于 Radix Tree 进行路由查找的 Python web 框架发布了!
以及好像跑题了,说回来的话,我注意到你的实现实际上是个巨大的正则树。那么这样的话,这个正则树是否可以合并为一个巨大的单一正则以实现更大的性能提升和更少的内存占用呢?
2020-10-05 19:06:37 +08:00
回复了 abersheeran 创建的主题 Python 第一个基于 Radix Tree 进行路由查找的 Python web 框架发布了!
@abersheeran 不仅如此,Starlette 早期是直接拿 Scope 当 Context 用的,Auth 、Session 、App 实例一类的都塞进 Scope 里,后来又有了 app.state 和 Request.state 两种 state,但是受限于 ASGI 标准,没有任何办法可以在中间件里访问到这个 Request.state…

所以如果真的玩 ASGI 标准的话,倒不如把这件事扔上台面,把 scope 变成一个 mutable dict 的单例,然后决定一下上下文是存到哪,是新开一个 dict 叫 state 或者 context,还是直接就存到 scope 里。

然后还得决定一下怎样让这个上下文在整个请求周期内都是可用的,怎样把它传到 receive 和 send 里。
2020-10-05 17:23:58 +08:00
回复了 abersheeran 创建的主题 Python 第一个基于 Radix Tree 进行路由查找的 Python web 框架发布了!
@abersheeran 老实说比较底层的部分每个框架的实现都有问题,比如没有一个框架和 Server 实现了 Websocket 的 Set-Cookie,明明 2.1 标准里就有了…这就扯远了。

但是 Socket 的问题我感觉不是特别大,因为目前其实也不推荐裸跑 ASGI 或者用 ASGI 传静态文件,大家都是外面套一个 Nginx 用的。

ASGI 还有一个问题就是它只是个纸面标准,没有针对每一项纸面规定的测试…也是比较遗憾了。
2020-10-05 17:16:18 +08:00
回复了 abersheeran 创建的主题 Python 第一个基于 Radix Tree 进行路由查找的 Python web 框架发布了!
@abersheeran ASGI 标准要求 Scope 是不可变的,每次修改都要复制 Scope 以避免污染上层 Middleware:
https://asgi.readthedocs.io/en/latest/specs/main.html#middleware

但是这样一来,Session 实际上是无法以纯 ASGI Middleware 可靠实现的,因为它需要一个上下文,在请求传至 Router 之前初始化上下文中的 Session (从 Cookie / 数据库中读取 Session 放入上下文),在 Endpoint 处理完之后将上下文中 Session 的最终状态进行存储。

而 ASGI 中不存在这样一个上下文存储,所以 Starlette 才会把 Scope 当作上下文,而最终的 Scope 又不会被传递至 send,就导致了一系列问题。
2020-10-05 13:22:32 +08:00
回复了 abersheeran 创建的主题 Python 第一个基于 Radix Tree 进行路由查找的 Python web 框架发布了!
@abersheeran ASGI 标准我感觉没什么前途,标准已经推到 3.0 了,但是各个实现都还很不完整,设计上也有点问题。

举例子说的话,比如 scope 明显应该是一个单例,但是 ASGI 里却将 Scope 定义为了一种 immutable,并且是在中间件之间可随意复制的。这埋下的一个巨坑就是对于一个中间件来说,根本没办法获取到最终的 Scope 引用,从而不能在 send 期间访问到一个稳定的上下文。

也就是说,这个半残的中间件机制甚至连一个稳定的,不需要在请求里操心存取的 Session 都实现不了。Starlette 里的 Session 实现是有坑的,他们把 Session 存到了 scope 里,违背了 immutable,然后使用了 ASGI 明确声明不可靠的闭包 scope 引用去在 send 期间检查和存储 scope 中的 session,这就使得 scope 一旦被复制,session 的管理就变得完全不可靠了。

而这根本就是一个 ASGI 标准的问题,因为基于性能的考量,一个上下文状态本就应该是单例,可变,不可复制的。
1 ... 16  17  18  19  20  21  22  23  24  25 ... 63  
关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   Solana   ·   1021 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 38ms · UTC 18:21 · PVG 02:21 · LAX 10:21 · JFK 13:21
♥ Do have faith in what you're doing.