- 博客(37)
- 收藏
- 关注
原创 通过script标签引入的js如何显示代码提示
npm install @types/库名 --save-dev。获取类型提示,必须要先安装nodejs。npm install 库名。
2024-11-13 17:20:30
234
原创 硬盘经常100%缓解办法
使用imdisk,创建内存盘,把缓存目录都改到内存盘。修改edge和chrome缓存目录,也改到内存盘关闭sysmain,超级预读关闭Windows search将虚拟内存设置为内存大小,最大值为1.5倍内存
2024-11-11 11:11:37
570
原创 迭代器和使用下标,究竟有何不同?
迭代器体现的是函数式编程的思维,函数式编程的核心思想是不使用赋值语句来改变状态。所以,使用迭代器的时候,不能修改当前元素的属性。但是使用下标,就没有这个限制了。
2024-09-14 00:43:20
238
原创 为啥pybind11是目前python调用c++的最佳选择
Cython 是一个非常强大的工具,它允许开发者将 Python 代码转换为 C 代码,从而提高性能。然而,尽管 Cython 提供了许多优势,但在某些情况下,它可能不是最佳选择。综上所述,虽然 Cython 在某些情况下非常有用,但在需要直接与 C++ 代码集成、需要更高效的多线程支持、或者希望利用现代 C++ 特性的情况下,pybind11 可能是更好的选择。
2024-09-11 14:25:52
1596
原创 《YC创业营》阅读笔记
我自己就是目标用户[1]只有少数人能做到几乎没人发现是个大问题容易推广,不需要自己一对一的推销,用户会推荐给他们朋友面向未来与发展[2]规模庞大,用户基数多,且不断增加[3]竞争者多(说明用户基数多,市场大)愿意掏钱购买或者有广告也原因使用的产品就算最初想法出问题,也会找到解决办法测试你的想法[1]我自己的需求:* 翻墙 违法,但是自己可以弄个改进工具,自己用;翻墙对一部分人来说,根本不需要* 连点器* 读书交流 最好可以1对1 ,翻墙可以说是基础;
2024-09-10 15:05:58
274
1
原创 Android Studio 添加c++模块
打开build.gradle.kts,在dependencies中添加 implementation(project(“:module_name”)),把其中的module_name换成真实的模块名.如果是app模块下的子模块,就是implementation(project(“:app:sub_module_name”)),把sub_module_name换成子模块的名字.”,单击它,就可以生成对应的C++方法了。我们可以在一个模块中,添加多个子模块,这些子模块各自生成不同的so文件.
2024-09-07 14:18:39
1014
转载 YC‘s Essential Startup Advice -- by Geoff Ralston, Michael Seibel
很多我们给创业公司的建议都是战术性的,旨在对日常或每周的工作有所帮助。但有些建议更为基础。我们在此汇集了YC认为最重要、最具变革性的创业建议。无论是常识性的还是反直觉的,下面的建议将帮助大多数创业公司找到成功的道路。我们总是告诉创始人的第一件事就是立即推出他们的产品,原因很简单,这是唯一能够完全了解客户问题并判断产品是否满足他们需求的方法。令人惊讶的是,尽早推出一个普通的产品,然后与客户沟通并不断迭代,这远比等待构建一个“完美”产品要好得多。
2024-09-05 00:23:26
264
转载 Startup Playbook
记住,一个好想法至少有一千个主人,但只有一个人能长风破浪,差距就在于执行力。这是件苦差事,每个人都希望用更容易的方法把理想变成现实,但目前还无人能及。因此,你需要的就是:一个好想法,一个牛团队,一个硬产品,和超级执行力。So easy!:)
2024-09-04 23:59:19
330
原创 无栈协程与有栈协程
有栈协程就爽多了,只有同步写法,但可以有异步的效果。一个协程在同步IO上阻塞,不会影响其他协程,也不会影响继续创建协程,这时候用同步就可以等同异步。无栈协程需要手动标记何时挂起,何时恢复,以及交给后台线程的任务是啥,这就导致同步和异步写法完全不同。kotlin协程是无栈协程,需要手动挂起和恢复~ async和await。无栈协程的问题是,有两种写法,同步和异步写法完全不同~go是有栈协程,完全可以当线程来用。
2024-08-05 00:36:41
388
原创 怎么理解“不要通过共享内存来进行通信;相反,通过通信来共享内存“
管道可以避免并发访问,管道里的数据可以被多个线程获取,写入,但只有一个线程能拿到数据(因为拿到后,管道为空,需要等待管道不为空,才能拿到数据)。管道里的数据被共享(多个线程可以从管道读,写数据到管道),而不是变量被共享。当管道为空时,线程会阻塞,比如线程1拿到数据,管道为空了,线程2就会等待,这样就避免了变量共享。CSP模型不允许两个线程共享变量,所以我们不能这样写~ 这不符合CSP的定义,那么怎么才能不共享变量呢?这样也就不用加锁了。我们把消息传递到管道,从管道获取数据,再将新数据放到管道。
2024-07-22 02:24:34
274
原创 uvicorn是如何多进程协作的
但是,当一个进程绑定到端口号时,直到操作系统释放这个端口,其他进程才能够再次绑定到该端口,而这个等待时间是通过 TIME_WAIT 状态来实现的。具体地,它们在主进程中创建一个监听套接字,然后在每个工作进程中使用 fork() 系统调用复制该套接字,从而实现多进程共享端口。总之,uvicorn、gunicorn 和 uwsgi 都是使用多进程模型来提高并发处理能力,它们通过监听同一个网络套接字来实现多进程共享端口,并且由操作系统使用负载均衡算法将客户端请求分配给不同的工作进程来处理。
2024-07-21 10:36:55
1401
转载 Why choose async/await over threads?
A common refrain is that threads can do everything that / can, but simpler. So why would anyone choose /?This is a common question that I’ve seen a lot in the Rust community. Frankly, I completely understand where it’s coming from.Rust is a low-level langu
2024-04-21 11:10:05
118
原创 C#和java(kotlin)的命名规范
好处是一下就能看出哪个是类或者接口,坏处是没发区分成员变量和局部变量,可以加一个下划线或者m作为前缀,以区分局部变量和成员变量。下划线一般表示私有变量。好处是一下子就能看出哪个是局部变量,因为它的规则最特殊,坏处是不容易区分类和成员变量(成员函数),可以给成员变量或者成员函数加一个大写的M。java和kotlin的命名规范一句话:类接口文件名大写驼峰,常量是全大写加下划线,其余全是小写驼峰。C#的命名规范一句话:局部变量是小写驼峰,常量是全大写加下划线,其余全是大写驼峰。
2024-04-11 10:00:40
230
2
原创 理解Kotlin协程的挂起和恢复
")// 模拟异步操作,例如网络请求")suspend 表示这个函数可能会挂起协程。suspendCoroutine 这个函数挂起协程。下面的代码表示后台线程要执行的任务,或者等到同一个线程空闲时执行。// 模拟异步操作,例如网络请求")continuation.resume 这个函数恢复协程WithContext 的内部就是调用了suspendCoroutine挂起当前协程,然后将活儿交给后台线程,后台线程执行完后,调用恢复被挂起的那个协程。
2023-10-20 19:51:26
483
原创 Android多线程异步通信模型-Handler & Looper
一个线程只能有一个MessageQueue,一个Looper,但可以有多个Handler,每一个 Handler 都可以有它自己的消息处理逻辑。消息处理是在Handler指定的Looper对应的线程中处理的。Handler/Looper模型和Actor模型很像,不同的是Handler/Looper模型更多的是关注同一个进程内主线程和工作线程间的简单、有效的消息传递和处理。每个进程使用消息和其他进程进行通信,每个进程有个邮箱可以存储消息,进程通过检查邮箱的消息,然后采取行动,这其实就是现在的Actor模型。
2023-10-12 23:04:32
216
转载 pomelo教程5: pomelo框架的设计动机与架构介绍[谢骋超]
以下是Pomelo官网给出的最初定义:Pomelo是基于node.js的高性能,分布式游戏服务器框架。它包括基础的开发框架和相关的扩展组件(库和工具包),可以帮助你省去游戏开发枯燥中的重复劳动和底层逻辑的开发。Pomelo最初的设计初衷是为了游戏服务器, 不过我们在设计、开发完成后发现pomelo是个通用的分布式实时应用开发框架。它的灵活性和可扩展性使pomelo框架有了更广阔的应用范围。由于强大的可能伸缩性和灵活性,pomelo在很多方面甚至超越了现有的开源实时应用框架。如果你浏览一下。
2023-10-10 23:42:30
1701
1
转载 pomelo教程4:场景服务分析[谢骋超]
在本篇文章中,我们分析了Pomelo框架中游戏场景的设计和实现,并分析了游戏场景的基本组成。并且为大家介绍了场景服务中最为基础的两个功能,数据持久化和广播消息。并介绍了Pomelo中提供的解决方案和使用方法。
2023-10-10 23:13:30
392
1
转载 Pomelo教程3:基于Pomelo的MMO RPG开发[作者:张小刚 谢骋超]2013-03-26
在本文中,我们介绍了如何使用Pomelo框架来构建了一个包括连接服务器和场景服务器的MMO RPG服务端。并介绍了如何使用pomelo特性,来对游戏服务端进行扩展,并构建出了一个分布式的MMO RPG服务。但是,这只是游戏服务端开发中最为基础的部分,MMO RPG中很多基础功能在这里都没有实现,如数据持久化,AI控制,寻路系统等。在下面的文章中,我们会进一步介绍Pomelo在游戏开发中的应用。
2023-10-10 23:05:33
248
1
转载 pomelo教程2: 深入浅出node.js游戏服务器开发--分布式聊天服务器搭建
聊天可认为是简化的实时游戏,它与游戏服务器有着很多共通之处,如实时性、频道、广播等。由于游戏在场景管理、客户端动画等方面有一定的复杂性,并不适合作为pomelo的入门应用。聊天应用通常是node.js入门接触的第一个应用,因此更适合做入门教程。Pomelo是游戏服务器框架,本质上也是高实时、可扩展、多进程的应用框架。除了在library中有一部分游戏专用的库,其余部分框架完全可用于开发高实时web应用。
2023-10-10 12:46:53
1731
1
转载 Pomelo教程1: 基础架构与框架介绍[谢骋超 2013-01-02]
没开发过游戏的人会觉得游戏服务器是很神秘的东西。但事实上它并不比 web 服务器复杂,无非是给客户端提供网络请求服务,本质上它只是基于长连接的 socket 服务器。当然在逻辑复杂性、消息量、实时性方面有更高的要求。游戏服务器是复杂的 socket 服务器。如果说 web 服务器的本质是 http 服务器,那么游戏服务器的本质就是 socket 服务器。它利用 socket 通讯来实现服务器与客户端之间的交互。事实上有不少游戏是直接基于原生 socket 来开发的。后端承载着极复杂的游戏逻辑。
2023-10-10 12:32:41
456
1
转载 Pomelo教程0: Node.js 之网游服务器实践[尧飘海 2012-09-20]
采用 Node.js 来实现网络游戏服务器的开发,除了能利用 JavaScript 的动态语言的优势特性、强大的开源社区和 V8 引擎的优越性能外,在网络数据传输的异步化方面具有快速、实时等事件编程模型;特别在 HTML5 的应用开发中,还具有前后端代码共享、DSL 灵活定义等特点。但是也由于 JavaScript 的动态脚本语言的性质,同时 V8 在内存使用上的限制等问题。
2023-10-10 09:36:47
315
1
原创 Python和C++相互调用
在这个程序中,我们首先定义了一个 C++ 函数 add(),它接受两个整数参数,并返回它们的和。然后,我们在 Python 解释器中定义了一个 Python 函数 PyAdd(),该函数将会调用 C++ 函数 add()。在定义 PyAdd() 函数时,我们使用了 PyArg_ParseTuple() 函数解析了 Python 脚本传递的参数,并将其传递给 C++ 函数 add()。
2023-03-25 21:27:44
1985
原创 依赖倒置,倒置了什么?&控制反转,反转了什么?
我们来看个例子:1. 有个接口叫A,2. B是一个类,实现了A接口,画个UML图,A<-B3. C是一个类,功能依赖B理论上应该直接引用B,但这样有个问题,如果有个同样实现了A接口的D类。C要支持它,就需要改代码。所以,本来我们是依赖具体实现类B的,现在缺依赖A了,倒置体现在这里。 A<-B 本来应该依赖B,而现在直接依赖A,也就是倒置了。(从B变成了A,B是具体实现类,A是抽象类或者接口)
2023-01-22 00:14:34
191
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅