C++返回值优化与移动语义的思考

C++的class本质上是值语义的,它在作为函数返回值时可能会造成不必要的拷贝 返回值优化(RVO)返回值优化是编译器对返回一个值语义对象时进行的优化,这有助于性能优化 假如我们有一个Foo类,它的定义如下所示 class Foo { public: Foo() { cout << "...     阅读全文
vhyz's avatar
vhyz 8月 19, 2019

用eventfd实现唤醒阻塞于epoll_wait的线程

eventfd是Linux提供的一个进程/线程间通信的一种方式,它是一个文件描述符,所以可以使用read/write。 在我们编写Reactor模式的服务器程序时,每个I/O线程都会有一个event loop,而这些线程会阻塞于epoll_wait(Linux系统) 我们在给这些线程分发任务时,需要唤醒阻塞这些线程,而eventfd可以加入到epoll中,所以我们可以使用eventfd来实现唤醒线程     阅读全文
vhyz's avatar
vhyz 7月 14, 2019

用Python模拟登录华工新版教务系统选课 (PyExecJS)

之前学校用的是老版正方教务系统,也写过文章,而最近学校更换了教务系统,作为计算机的学生,当然还是看看能不能写个脚本抢下课啦。 具体用的时候也需要加点多线程的功能,我大概开了15个线程吧,不得不说学校这次的教务系统的服务器比之前的好了。 成果大概就是帮一位女同学成功抢到了课(主要是脚本也没有扩散,毕竟如果多人使用这种脚本对服务器还是有点影响的 模拟登录请求第一步是登录一次教务系统,然后抓包看...     阅读全文
vhyz's avatar
vhyz 3月 17, 2019

C++完美转发与std::forward

初次遇到std::forward是在阅读std::make_shared源码时看到的,当时不少很能理解为什么这可以达到完美转发的目的。这里来总结一下。 引用折叠std::forward的出现是因为C++11右值语义的出现,而有时候我们需要写下面的代码进行参数的转发。 template<class T> void foo(T&& arg) { ...     阅读全文
vhyz's avatar
vhyz 9月 13, 2018

造shared_ptr轮子时需要注意的几点

最近在写智能指针shared_ptr的实现,本以为是一个比较简单的轮子,但其实内部实现是比较复杂的,总的来说总共有以下几项。 内部数据结构的实现shared_ptr有两个私有成员,一个为指向对象指针,另一个为引用计数块的指针。 我刚开始以为内部只是一个指向对象指针和一个引用计数(比如size_t)的指针,其实内部构造并不是这么简单,智能指针shared_ptr需要满足下面几点。...     阅读全文
vhyz's avatar
vhyz 7月 28, 2018