百万并发连接的实践测试02

简介: 百万并发连接的实践测试02

本次主要解决上次遗留的数据结构问题

代码部分

头文件

#ifndef STRUCT_H_
#define STRUCT_H_
#include <stdio.h>
#define BUFFER_LENGTH       1024
#define EPOLL_LENGTH        1024
typedef struct conn_item conn_item_t;
typedef struct conn_block conn_block_t;
typedef struct reactor_node reactor_node_t;
int reactor_init(reactor_node_t* reactor);
void reactor_dest(reactor_node_t* reactor);
int reactor_block_connect(reactor_node_t* reactor);
int reactor_item_connect(reactor_node_t* reactor, int fd);
#endif

源文件

#include "struct.h"
#include <stdlib.h>
#include <string.h>
typedef struct conn_item
{
    int fd;
    char wbuffer[BUFFER_LENGTH];
    int wc;
    char rbuffer[BUFFER_LENGTH];
    int rc;
} conn_item_t;
typedef struct conn_block
{
    struct conn_item* conntions;
    struct conn_block* next;
} conn_block_t;
typedef struct reactor_node
{
    int epfd;
    int blcnt;
    struct conn_block* block_heander;
} reactor_node_t;
int reactor_init(reactor_node_t* reactor)
{
    if(!reactor)
        return -1;
    reactor->block_heander = malloc(sizeof(conn_block_t) + EPOLL_LENGTH * sizeof(conn_item_t));
    if(reactor->block_heander == NULL)
        return -1;
    reactor->block_heander->next = NULL;
    reactor->block_heander->conntions = (conn_item_t*)(reactor->block_heander + 1);
    reactor->blcnt = 1;
    reactor->epfd = epoll_create(1);
}
void reactor_dest(reactor_node_t* reactor)
{
    if(!reactor)
        return;
    if(!reactor->block_heander)
        free(reactor->block_heander);
    close(reactor->epfd);
}
int reactor_block_connect(reactor_node_t* reactor)
{
    if(!reactor)
        return -1;
    conn_block_t* block = malloc(sizeof(conn_block_t) + EPOLL_LENGTH * sizeof(conn_item_t));
    if(block == NULL)
        return -1;
    conn_block_t* temp = reactor->block_heander;
    while(temp->next != NULL)
        temp = temp->next;
    temp->next = block;
    block->conntions = (conn_item_t*)(block + 1);
    reactor->blcnt++;
    return 0;
}
int reactor_item_connect(reactor_node_t* reactor, int fd)
{
    int i = 0;
    if(!reactor)
        return -1;
    int pos = fd / EPOLL_LENGTH;
    while(pos > reactor->blcnt)
    {
        reactor_block_connect(reactor);
    }
    conn_block_t* blk = reactor->block_heander;
    for(; i < pos; i++)
    {
        blk = blk->next;
    }
    int idx = fd % EPOLL_LENGTH;
    blk->conntions[pos].fd = fd;
    memset(blk->conntions[pos].rbuffer, 0, BUFFER_LENGTH);
    memset(blk->conntions[pos].wbuffer, 0, BUFFER_LENGTH);
    blk->conntions[pos].rc = 0;
    blk->conntions[pos].wc = 0;
    return 0;
}

数据结构示意图

代码解读

上次我们是搞了一个很大的数组,这次我们做出一些优化。把做出一个链式结构,一个链表头,下面有很多块。块里面是conn_item,一个块里面有1024个conn_item。

相关文章
|
3天前
|
Java 测试技术 开发者
初学者入门:掌握单元测试的基础与实践
【10月更文挑战第14天】单元测试是一种软件测试方法,它验证软件中的最小可测试单元——通常是单独的函数或类——是否按预期工作。单元测试的目标是确保每个模块在其自身范围内正确无误地运行。这些测试应该独立于其他模块,并且应该能够反复执行而不受外部环境的影响。
14 2
|
11天前
|
机器学习/深度学习 人工智能 监控
提升软件质量的关键路径:高效测试策略与实践在软件开发的宇宙中,每一行代码都如同星辰般璀璨,而将这些星辰编织成星系的过程,则依赖于严谨而高效的测试策略。本文将引领读者探索软件测试的奥秘,揭示如何通过精心设计的测试方案,不仅提升软件的性能与稳定性,还能加速产品上市的步伐,最终实现质量与效率的双重飞跃。
在软件工程的浩瀚星海中,测试不仅是发现缺陷的放大镜,更是保障软件质量的坚固防线。本文旨在探讨一种高效且创新的软件测试策略框架,它融合了传统方法的精髓与现代技术的突破,旨在为软件开发团队提供一套系统化、可执行性强的测试指引。我们将从测试规划的起点出发,沿着测试设计、执行、反馈再到持续优化的轨迹,逐步展开论述。每一步都强调实用性与前瞻性相结合,确保测试活动能够紧跟软件开发的步伐,及时适应变化,有效应对各种挑战。
|
8天前
|
测试技术 UED
软件测试的艺术与实践
【10月更文挑战第9天】 在数字时代的浪潮中,软件成为了我们生活和工作不可或缺的一部分。然而,高质量的软件背后,是无数测试工程师的默默付出。本文将通过深入浅出的方式,探讨如何进行高效的软件测试,确保软件产品的质量与稳定性。我们将一起揭开软件测试的神秘面纱,从基础理论到实际操作,一步步走进这个充满挑战与创造的世界。
|
3天前
|
机器学习/深度学习 人工智能 自然语言处理
探索AI在软件测试中的创新应用与实践###
本文旨在探讨人工智能(AI)技术如何革新软件测试领域,提升测试效率、质量与覆盖范围。通过深入分析AI驱动的自动化测试工具、智能化缺陷预测模型及持续集成/持续部署(CI/CD)流程优化等关键方面,本研究揭示了AI技术在解决传统软件测试痛点中的潜力与价值。文章首先概述了软件测试的重要性和当前面临的挑战,随后详细介绍了AI技术在测试用例生成、执行、结果分析及维护中的应用实例,并展望了未来AI与软件测试深度融合的趋势,强调了技术伦理与质量控制的重要性。本文为软件开发与测试团队提供了关于如何有效利用AI技术提升测试效能的实践指南。 ###
|
12天前
|
测试技术
软件测试中的探索性测试(ET)实践
【10月更文挑战第5天】本文将深入探讨一种与传统脚本化测试不同的测试方法——探索性测试(Exploratory Testing,简称ET)。我们将通过一个实际案例来展示ET的有效性,并分享如何将ET融入日常的软件测试流程中。文章旨在为测试人员提供一种灵活、高效的测试策略,帮助他们更好地发现软件中的缺陷。
|
12天前
|
Web App开发 设计模式 测试技术
自动化测试框架的搭建与实践
【10月更文挑战第5天】本文将引导你理解自动化测试框架的重要性,并通过实际操作案例,展示如何从零开始搭建一个自动化测试框架。文章不仅涵盖理论,还提供具体的代码示例和操作步骤,确保读者能够获得实用技能,提升软件质量保障的效率和效果。
|
15天前
|
测试技术 持续交付 Python
软件测试中的自动化策略与实践
【10月更文挑战第2天】在软件开发的海洋中,自动化测试如同一座灯塔,为追求高效率和高质量的航程提供方向。本文将深入探讨自动化测试的策略与实践,从基础理论到实际应用,带领读者领略自动化测试的魅力和挑战。
|
15天前
|
敏捷开发 jenkins 测试技术
自动化测试框架的设计与实践
【10月更文挑战第2天】在软件开发周期中,测试阶段扮演着至关重要的角色。随着敏捷开发和持续集成的流行,自动化测试已成为确保软件质量和加快交付速度的关键工具。本文将深入探讨自动化测试框架的设计原则、组件选择、以及实现过程。通过实际案例分析,我们不仅展示了如何构建一个健壮的自动化测试框架,还讨论了如何克服常见问题,并提出了优化策略,以帮助读者更好地理解自动化测试的价值和实施细节。
|
17天前
|
敏捷开发 监控 测试技术
深入理解自动化测试:从理论到实践
自动化测试在软件开发中扮演着至关重要的角色,它不仅提高了测试效率,还确保了软件质量的一致性和可靠性。本文将引导你了解自动化测试的核心概念,探讨其在不同开发阶段的应用,并通过一个简单的代码示例,展示如何实现一个基本的自动化测试脚本。无论你是初学者还是有经验的开发者,这篇文章都将为你提供宝贵的见解和实用的技能。
|
17天前
|
敏捷开发 测试技术 持续交付
软件测试中的自动化策略与实践
在软件开发的海洋中,自动化测试是一艘能够带领团队高效航行的帆船。它不仅能提升测试效率,还能保证软件质量的稳定性。本文将通过深入浅出的方式,带你了解自动化测试的核心概念、工具选择、框架搭建,以及如何将自动化测试融入日常开发流程中,让你的开发团队乘风破浪,驶向成功的彼岸。